我想实现一个函数,创建5对线程(一对意味着一个线程写,另一个线程读,两个线程共享一个列表(在这种情况下是5个列表)。我需要创建五个互斥锁吗?如何申报?在全球范围内?
我需要创建五个互斥锁吗?
取决于您的数据结构。如果您有五个不同的数据对象要从五个相关的线程对中安全访问,则需要五个;如果所有线程只访问一个数据对象,则只需要一个。
如何申报?在全球范围内?
将数据对象、互斥对象和(写入)线程函数封装在一个类中。我想说,您不需要另一个读取线程,那个是通常调用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
}
};