簡體   English   中英

多線程互斥鎖可以使用幾個互斥鎖嗎

[英]mutex lock in multi-thread can I use several mutex locks

我想實現一個創建5對線程的函數(一對意味着一個線程寫而另一個線程讀,並且兩個線程共享一個列表(在這種情況下為5個列表)。我需要創建五個互斥鎖嗎?聲明它們嗎?

我需要創建五個互斥鎖嗎?

取決於您的數據結構。 如果您有五個不同的數據對象可從五個關聯的線程對安全訪問,則將需要五個,如果所有線程僅訪問一個數據對象,則將只需要一個。

如何聲明它們? 在全球范圍內?

將您的數據對象,互斥量和(寫入)線程函數封裝在一個類中。 我會說您不需要另一個讀取線程,這是調用通常運行的線程,或任何其他可以訪問此類的實例的線程。

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
    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM