这段C++代码什么意思(15)

  • 主题发起人 主题发起人 linuxping
  • 开始时间 开始时间
L

linuxping

Unregistered / Unconfirmed
GUEST, unregistred user!
Detail::SIZE_T lock_, free_; volatile Detail::SIZE_T* pointer = reinterpret_cast <volatile Detail::SIZE_T*>(ptr); do { while((free_ = *pointer) & Detail::SIZE_T(1)) { ::Sleep(0); } lock_ = free_ | Detail::SIZE_T(1); } while(Detail::InterlockedCompareExchange_(pointer, lock_, free_) == lock_); 因为代码不完整,所以说明一下。Detail::SIZE_T就是windows中的size_t。上面的代码是在让我头晕。谁仔细解释一下?
 
判断这个指针所指向的位置,一旦有数据了就执行下面的比较转换
 
根据iamy的提示:内层循环while((free_ = *pointer) & Detail::SIZE_T(1)) { ::Sleep(0); } 只要pointer不为null,循环不会退出,直到pointer=null。lock_ = free_ | Detail::SIZE_T(1); 此时free_应该=0. lock_= 0 | SIZE_T(1); 则lock_也为0.外层循环:do{}while(Detail::InterlockedCompareExchange_(pointer, lock_, free_) == lock_);此时,lock_=0, free_=0,如果pointer<>0外层循环不会退出。对不对?
 
后退
顶部