如果我有一个关键部分,我必须实现一个锁定它的方法。我看到了以下的变体:轮询锁是否实现关键部分的正确方法?
while(lock)
{
//do nothing
}
lock = true;
// code of critical section
lock = false;
然而,我怀疑它,因为在理论上,几个线程可以执行while(lock)
(检查,看看它的= FALSE),并进入临界区一起,因为while(lock)
和lock = true;
不是在一个连续的块中执行的。我错了吗?或者这确实是一种不安全的方法?
你需要一个锁,所以使用一个锁。 –