如何在 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
。如果您想确保在访问a
和b
时锁定互斥锁,则必须按照我在答案中提到的那样编写包装器。
您不能锁定任意变量。您只能锁定具有lock
方法的对象(请参阅BasicLockable
)。以上是关于如何在 C++ 中获取锁?的主要内容,如果未能解决你的问题,请参考以下文章