我想实现一个我创建5对线程的函数(一对意味着一个线程写入,另一个读取,两个线程共享一个列表(在这种情况下为5个列表)。 我需要创建五个互斥锁吗?如何申报?在全球范围内?
答案 0 :(得分:1)
我是否需要创建五个互斥锁?
取决于您的数据结构。如果您有五个不同的数据对象可以安全地从五个关联的线程对中访问,那么您将需要五个,如果所有线程只访问一个数据对象,则只需要一个。
如何申报?在全球范围内?
在类中封装数据对象,互斥锁和(写)线程函数。我会说你不需要另一个阅读线程,那就是那个通常调用run的线程,或者任何其他可以访问这个类的实例的线程。
class MyAsynchDataProvider
{
public:
void run()
{
writeThread = std::thread(writeDataFunc,this);
}
MyDataStruct getSafeDataCopy()
{
std::lock_guard lock(dataGuard);
return data;
}
private:
std::mutex dataGuard;
MyDataStruct data;
std::thread writeThread;
static void writeThreadFunc(MyDataWorker* thisPtr)
{
// ...
std::lock_guard lock(thisPtr->dataGuard);
// Write to thisPtr->data member
}
};