我想实现一个创建 5 对线程的功能(一对意味着一个线程写入,另一个线程读取,并且两个线程共享一个列表(在这种情况下为 5 个列表)。我需要创建五个互斥锁吗?如何宣布他们?在全球范围内?
问问题
205 次
1 回答
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
}
};
于 2013-07-21T12:40:17.530 回答