gpt4 book ai didi

c++ - 实现锁

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:20 25 4
gpt4 key购买 nike

我正在尝试了解锁的工作原理。

假设我想用 C++ 实现一个非常简单的锁

class Resource{
public:
bool lock();
void unlock();
... methods to change/read the Resource ...

private:
bool isLocked;
}

资源的用户调用lock(),如果isLocked为true,则lock()返回false,用户资源必须等待或做其他事情。如果 isLocked 为 false,则 lock()isLocked 设置为 true,并返回 true。然后调用者可以对资源做任何他想做的事。之后他在资源上调用 unlock()isLocked 设置为 false。

但是,如果资源的两个用户同时调用 lock() 会怎样?这种情况很少发生吗?我认为更正式地说,这涉及使 lock() 操作成为“原子”操作,尽管我不确定该词的确切含义。

最佳答案

使用旧的标准 C++,您无法实现自己的锁,因为锁变量本身处于数据竞争中。

C++11 和 C11 添加了 atomic 变量,您可以将其用于此目的;例如在 C++ 中:

#include <atomic>

std::atomic<bool> isLocked;

bool lock() { return !isLocked.exchange(true); }

void unlock() { isLocked = false; }

这里的关键是原子交换和(隐式)原子存储,它们生成特殊的硬件指令并且始终是无竞争的,并且您不能用普通变量“伪造”。

关于c++ - 实现锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10058747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com