我试图了解锁是如何工作的。
假设我想在 C++ 中实现一个非常简单的锁
class Resource{
public:
bool lock();
void unlock();
... methods to change/read the Resource ...
private:
bool isLocked;
}
资源的用户调用
lock()
,如果 isLocked
为真,那么 lock()
返回假,资源的用户要么等待,要么做其他事情。如果 isLocked
为 false,则 lock()
将 isLocked
设置为 true,并返回 true。然后调用者可以对资源做任何他想做的事情。之后他在资源上调用 unlock()
以将 isLocked
设置为 false。但是,如果资源的两个用户恰好在同一时间调用
lock()
呢?这种情况很少发生吗?我认为更正式的是,这涉及使 lock()
操作“原子化”,尽管我不确定这个词的含义。 最佳答案
“原子”意味着操作不能被中断。也就是说,无论其他线程/进程的行为如何,您都可以确保该操作的语义是相同的。您是对的,您的 lock()
调用中的某些内容可能必须是原子的。大多数架构提供了一些有保证的原子行为的有用指令 - 您可能还会发现一些基于这些操作的库,以便在您编程的更高层为您提供更大的灵活性。