互斥锁在多线程中我可以使用几个互斥锁



我想实现一个函数,创建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
    }
};

相关内容

最新更新