我试图了解锁是如何工作的。

假设我想在 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() 调用中的某些内容可能必须是原子的。大多数架构提供了一些有保证的原子行为的有用指令 - 您可能还会发现一些基于这些操作的库,以便在您编程的更高层为您提供更大的灵活性。

10-07 16:38