免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2482 | 回复: 2
打印 上一主题 下一主题

继续请教#define spin_unlock(lock) do { } while(0)的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-08 15:13 |只看该作者 |倒序浏览
从新写一段清楚的代码
ipsec_rcv.c543行(freeswan中的文件)

  1. if(tdbprev == NULL) {
  2.                         spin_lock(&tdb_lock);
  3.                 }
  4.                
  5. #ifdef CONFIG_IPSEC_IPCOMP
  6.                 if (proto == IPPROTO_COMP) {
  7.                         unsigned int flags = 0;
  8.                         if (tdbp == NULL) {
  9.                                 spin_unlock(&tdb_lock);
  10.                                 KLIPS_PRINT(debug_rcv,
  11.                                             "klips_debug:ipsec_rcv: "
  12.                                             "Incoming packet with outer IPCOMP header SA:%s:
  13.                                                not yet supported by KLIPS, dropped\n",
  14.                                             sa_len ? sa : " (error)");
复制代码

spin_lock(&tdb_lock)和spin_unlock(&tdb_lock)的定义:

#define spin_lock(lock)                (void)(lock) /* Not "unused variable". */

#define spin_unlock(lock)        do { } while(0)
其它相关定义:
spinlock_t tdb_lock;

#if (__GNUC__ >; 2)
  typedef struct { } spinlock_t;
#elif (DEBUG_SPINLOCKS < 2)

typedef struct {
        volatile unsigned long lock;
} spinlock_t;

这段代码的lock和unlock比较清楚,斑竹给解释一下lock具体工作原理
目前do{}while(0)还是很不理解,不可能unlock什么也不做阿

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-05-08 17:20 |只看该作者

继续请教#define spin_unlock(lock) do { } while(0)的问题

需要结合上下文看,单独的很难看出是做什么的,就上面的代码,好像在宏CONFIG_IPSEC_IPCOMP 没有定义的时候进行lock(有效地)。定义了的话,进行unlock(实际上什么也没有作),在语句#ifdef CONFIG_IPSEC_IPCOMP 的后面应该还有条件预编译的,余下的代码段可能让另外的一个宏来控制,或者做其它的处理。

论坛徽章:
0
3 [报告]
发表于 2003-05-08 18:11 |只看该作者

继续请教#define spin_unlock(lock) do { } while(0)的问题

这两个也是空操作

spin_lock就是自旋锁
如果锁不可得的话一直循环到锁可得

适用于操作时间短的场合

这里是空操作那么意思就是在这个系统上不需要自旋锁(可能是不支持或是没有必要)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP