gpt4 book ai didi

c++ - 多线程中的互斥锁我可以使用多个互斥锁吗

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:00 24 4
gpt4 key购买 nike

我想实现一个创建 5 对线程的函数(一对表示一个线程写入,另一个线程读取,两个线程共享一个列表(在这个场景中有 5 个列表)。我需要创建五个互斥锁吗?如何申报?在全局范围内?

最佳答案

Do I need to create five mutex locks?

取决于您的数据结构。如果您有五个不同的数据对象可以从五个关联的线程对安全访问,那么您将需要五个,如果所有线程只访问一个数据对象,您将只需要一个。

How to declare them? In global area?

将您的数据对象、互斥锁和(编写)线程函数封装在一个类中。我会说您不需要另一个阅读线程,即通常调用 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
}
};

关于c++ - 多线程中的互斥锁我可以使用多个互斥锁吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17772408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com