有人可以解释 lowlevellock.h 的源代码吗
Can someone explain the source code for lowlevellock.h
我明白第一位表示锁定
atomic_increment 是做什么的?
这行是做什么的“atomic_add_zero (mutex, 0x80000000))”
为什么我们需要在 while 循环中再次检查 atomic_bit_test_set?
这个的基本思想是什么?谢谢!
static inline void
__generic_mutex_lock (int *mutex)
{
unsigned int v;
if (atomic_bit_test_set (mutex, 31) == 0)
return;
atomic_increment (mutex);
while (1)
{
if (atomic_bit_test_set (mutex, 31) == 0)
{
atomic_decrement (mutex);
return;
}
v = *mutex;
if (v >= 0)
continue;
lll_futex_wait (mutex, v,
// XYZ check mutex flag
LLL_SHARED);
}
}
static inline void
__generic_mutex_unlock (int *mutex)
{
if (atomic_add_zero (mutex, 0x80000000))
return;
lll_futex_wake (mutex, 1,
// XYZ check mutex flag
LLL_SHARED);
}
它将互斥量作为原子操作递增。这意味着它将以其他线程无法访问它的方式执行在操作期间。它避免了竞争条件。
我明白第一位表示锁定
atomic_increment 是做什么的?
这行是做什么的“atomic_add_zero (mutex, 0x80000000))”
为什么我们需要在 while 循环中再次检查 atomic_bit_test_set?
这个的基本思想是什么?谢谢!
static inline void
__generic_mutex_lock (int *mutex)
{
unsigned int v;
if (atomic_bit_test_set (mutex, 31) == 0)
return;
atomic_increment (mutex);
while (1)
{
if (atomic_bit_test_set (mutex, 31) == 0)
{
atomic_decrement (mutex);
return;
}
v = *mutex;
if (v >= 0)
continue;
lll_futex_wait (mutex, v,
// XYZ check mutex flag
LLL_SHARED);
}
}
static inline void
__generic_mutex_unlock (int *mutex)
{
if (atomic_add_zero (mutex, 0x80000000))
return;
lll_futex_wake (mutex, 1,
// XYZ check mutex flag
LLL_SHARED);
}
它将互斥量作为原子操作递增。这意味着它将以其他线程无法访问它的方式执行在操作期间。它避免了竞争条件。