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

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

【问题讨论】:

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

标签: c++ multithreading synchronization locks


【解决方案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)。
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
相关资源
最近更新 更多