我在阅读内核代码时,在一个if语句中看到了一个表达式,就像这样
if (value == (SPINLOCK_SHARED | 1) - 1) {
............
}
SPINLOCK_SHARED = 0x80000000
是一个预定义常量。
我想知道为什么我们需要(SPINLOCK_SHARED | 1) - 1
进行类型转换?这个表达式的结果将是80000000,与0x80000000相同,不是吗?但是,为什么要进行按位或运算和减1操作呢?
感觉好像有些东西我没有理解到。。。
if (atomic_cmpset_int(&spin->counta, SPINLOCK_SHARED|0, 1))
。 - Eric Postpischil