有人可以解释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);
}
iCMS 回答:有人可以解释lowlevellock.h

它将互斥量作为原子操作递增。这意味着它将以某种方式执行,即在操作期间没有其他线程可以访问它。这样可以避免比赛条件。

本文链接:https://www.f2er.com/1904726.html

大家都在问