【问题标题】:Mutex class member互斥类成员
【发布时间】:2012-02-15 05:11:51
【问题描述】:

如果我有一个有 5 个成员变量的类,例如,

class XYZ
{
public:
double x1;
......
double x5;
};

有 5 个线程,每个线程访问同一个对象的 1 个成员变量(其中一个是未知的)。如果我想让它线程安全且高效,是否有必要在类中创建 5 个互斥锁成员。换句话说,

class XYZ
{
public:
double x1;
......
double x5;
boost::mutex mutex1;
......
boost::mutex mutex5;
};

谢谢。

【问题讨论】:

  • 如果可以的话,您也许可以使用std::atomic<double> 而不进行任何手动同步。

标签: c++ multithreading


【解决方案1】:

可以从同一个线程锁定和解锁互斥锁,因此如果您有 5 个不同的线程将同时获取 5 个不同的临界区,是的,您将需要为每个线程单独的互斥锁。

【讨论】:

  • 感谢您的回复。这是一个好的多线程设计吗?我的意思是类中的每个对象成员都有 1 个互斥锁。
  • @2607:我猜你意识到这不是一个非常优雅的设计,但它可以完成工作。除非完全了解实现的要求和方法,否则很难说如何避免它。
  • 示例过于简化,实际上这就是我想要实现的。我有一个 M 个对象的向量,每个对象都有 N 个成员变量。有 X 个线程,每个线程都可以访问向量内任何对象的任何成员变量。我正在努力实现这一目标并且还具有最小的关键部分,即每次都尽可能少地阻塞。谢谢。
  • @2607:那么您选择了最佳解决方案。在这种情况下,细粒度锁定是非常可取的。
猜你喜欢
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
相关资源
最近更新 更多