我有升壓自旋鎖碼的一些問題:約自旋鎖
class spinlock
{
public:
spinlock()
: v_(0)
{
}
bool try_lock()
{
long r = InterlockedExchange(&v_, 1);
_ReadWriteBarrier(); // 1. what this mean
return r == 0;
}
void lock()
{
for (unsigned k = 0; !try_lock(); ++k)
{
yield(k);
}
}
void unlock()
{
_ReadWriteBarrier();
*const_cast<long volatile*>(&v_) = 0;
// 2. Why don't need to use InterlockedExchange(&v_, 0);
}
private:
long v_;
};
好,開鎖是無條件的... – 2013-02-18 09:17:18
@KerrekSB此外,先驗的,如果你調用'unlock',你有鎖,'v_'只能是'1'。 – 2013-02-18 09:18:48