如何在 C++ 中获取锁?

Posted

技术标签:

【中文标题】如何在 C++ 中获取锁?【英文标题】:How to acquire a lock in C++? 【发布时间】:2014-11-08 11:44:26 【问题描述】:

谁能帮助我理解如何在最简单的例子中锁定 c++ 中的变量,假装我需要在一个函数或一个线程中锁定 2 个变量

【问题讨论】:

你的意思是这样的:en.cppreference.com/w/cpp/thread/lock_guard? 你的意思是像std::mutex这样的互斥锁? cppreference中的例子绰绰有余,很简单。 我可以锁定 int 类型的变量吗? @Arwa196 “我可以锁定 int 类型的变量吗?” 你真的读过那里的示例吗? 【参考方案1】:

给定:

int a;
int b;
std::mutex mutex;

只要做:


    std::lock_guard<decltype(mutex)> lock(mutex);
    ++a; // or whatever you wanna do to a
    b += a; // or whatever you wanna do to b

这将自动释放 处的锁。

如果您想确保在访问相关变量之前获得锁,则必须编写一个包装器。

【讨论】:

这将在 范围内锁定 a 和 b,对吗?如果我不需要锁定该范围内的所有变量怎么办? 不,它锁定了mutex。如果您想确保在访问ab 时锁定互斥锁,则必须按照我在答案中提到的那样编写包装器。 您不能锁定任意变量。您只能锁定具有lock 方法的对象(请参阅BasicLockable)。

以上是关于如何在 C++ 中获取锁?的主要内容,如果未能解决你的问题,请参考以下文章

如何初始化已经在 C++ 中声明的唯一锁?

如何在 C++ 中正确地在循环中使用互斥锁?

C++:如何简化线程锁?

如何解决 C++ 中的未释放锁问题

如何在 C++ 中单独锁定 unordered_map 元素

如何在 OpenMP 中使用锁?