[英]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.