2016-01-21 66 views
-1

我想初始化的c'tor的潮頭鎖,我沒有找到路...C++ /類和線程

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 
}; 

感謝您的幫助

+1

我想給你正確的答案,我沒有找到方法... – SergeyA

回答

0

我不知道如果這是一個好主意,但應用正確的語法,你需要你的構造函數成員初始化列表:

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

要知道,這讓全班的定義僅僅是在_locker的代理,並互斥ST ays整個一生都在鎖定你的課程。

因此,只要_mu是該類的成員就沒有太大意義。

如果你的類在內部使用線程,你應該使用unique_lock作爲可以同時調用的函數中的局部變量。

+0

但我還需要在它之前初始化互斥體 – lee78

+0

@SamCristall,true。評論沒有空間列出所有限制:),我是在爭論一般情況。 – SergeyA

+0

不確定是否要調出它,但這隻有在該類中的鎖之前列出了互斥鎖時纔有效。如果它是另一種方式,那麼在互斥鎖之前鎖將被初始化。 – NathanOliver