在 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函数,这种情况下,相当于一个操作,它进行了两次计算会导致出现稀疏检测警告信息,我写了一个实验代码来测试我的判断后,确实会出现警告信息,如果我写了两次解锁指令,没有警报信息,但是这个程序运行时不一致。