【问题标题】:C++ / Classes & Threads [duplicate]C ++ /类和线程[重复]
【发布时间】:2016-01-21 17:56:06
【问题描述】:

我想在c'tor中初始化uniqe锁,没找到方法……

class readersWriters{
private:
mutex _mu;
unique_lock<mutex> _locker;
condition_variable _condW;
condition_variable _condR;
int _readersNumber;
int _writersNumber;
std::string _fileName;

public:
readersWriters(std::string fileName);
void readLock();
void writeLock();
void readUnlock();
void writeUnlock();
std::string readLine(int lineNumber); //lineNumber - line number to read
void WriteLine(int lineNumber, std::string newLine);//lineNumber - line    number to write 
};

感谢您的帮助

【问题讨论】:

  • 我想给你正确的答案,我没有找到方法...

标签: c++ multithreading class


【解决方案1】:

我不确定这是否是个好主意,但要应用正确的语法,您需要构造函数成员初始化列表:

 readersWriters(string fileName) : _mu(), _locker(_mu) {}

请注意,这会使您的整个类定义仅仅是_locker 的代理,并且互斥锁在您的类的整个生命周期内都保持锁定状态。

因此,只要_mu 是该类的成员,它就没有多大意义。

如果您的类在内部使用线程,您应该使用unique_lock 作为可并发调用的函数中的局部变量。

【讨论】:

  • 但我还需要在它之前初始化互斥锁
  • @SamCristall,真的。评论没有空间列出所有限制:),我在争论一般情况。
  • 不确定是否要调用它,但这可能仅在互斥锁列在类中的锁之前才有效。如果是另一种方式,锁将在互斥锁之前被初始化。
  • 我用不同的线程写入文件,所以如果线程正在写入,我想每次都锁定它,所以我会在那个时候锁定它
  • @lee78 当然可以。如前所述,使用 unique_lock 类范围是没有意义的。请参阅参考文档中的examples。它适用于本地范围。
猜你喜欢
  • 2017-01-16
  • 2019-03-11
  • 2010-12-21
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
相关资源
最近更新 更多