【发布时间】:2013-09-02 06:53:10
【问题描述】:
在complier.h中,有一个宏定义如下:
# define __cond_lock(x,c) ((c) ? ({ __acquire(x); 1; }) : 0)
但是这里我有个问题,就是哪里有__cond_lock定义,却没有定义对应的__cond_unlock,那么释放上的变量,如何保持__cond_lock和__cond_unlock一致?
而且我查看了函数spin_trylock()的定义,它使用了__cond_lock,但是其中也使用了一个_spin_trylock函数。在_spin_trylock函数中,经过几次调用,在这种情况下会使用到__acquire函数,相当于一个操作,它进行了两次计算会导致出现Sparse detection的警告信息,我写了一个实验代码来测试我的判断之后,确实会出现警告信息,如果我写了两次解锁指令,就没有警告信息,但是这在程序运行时不一致。
【问题讨论】:
标签: linux compilation kernel