我试图了解锁是如何工作的。
假设我想在 C++ 中实现一个非常简单的锁
class Resource{
public:
bool lock();
void unlock();
... methods to change/read the Resource ...
private:
bool isLocked;
}
资源的用户调用lock()
,如果isLocked
为真,则lock()
返回假,资源的用户要么等待,要么做其他事情。如果isLocked
为假,则lock()
设置isLocked
为真,并返回真。然后调用者可以对资源做任何他想做的事情。之后他调用unlock()
资源设置isLocked
为假。
但是,如果资源的两个用户lock()
恰好同时调用呢?这种情况很少发生吗?我认为更正式地说,这涉及使lock()
操作“原子”,尽管我不确定该词的含义。