我正將幾個變量通過指針(cv :: Mat's和bool's)傳遞給幾個線程,並試圖瞭解何時需要它使用互斥體。我發現如果不在cv :: Mat上使用它,我的程序會崩潰(很可能是因爲一個線程正在寫入另一個正在讀取的同一個內存區域),所以我已經爲這些變量實現了互斥鎖,並且它已經解決了這個問題。爲什麼互斥體不需要互斥體(並且該互斥體需要互斥體...)
但現在互斥體是一個更多的變量,我通過指針傳遞給每個線程。因此,在這種情況下,使用互斥變量的處理方式與我需要互斥量的其他變量相同,所以互斥體的特殊之處在於我不需要互斥體(當然,這仍然存在永遠和conept不起作用)。
要清楚,代碼我工作正常,這是更多的教育目的。
實施例:
//Common frames
cv::Mat captureimage, displayimage;
std::mutex capturemutex, displaymutex;
//Start image capture thread
std::thread t_imagecapture(CaptureImageThread, &captureimage, &capturemutex, &exitsignal);
//Start image processor thread
std::thread t_imageprocessor(ProcessImageThread, &captureimage, &capturemutex, &exitsignal);
//Start display thread
std::thread t_displayupdate(DisplayUpdateThread, &displayimage, &displaymutex, &exitsignal);
通常對於線程之間共享的所有變量都有一個互斥量就足夠了。 –
互斥鎖被設計爲自己進行線程安全。他們使用操作系統的底層機制,這可以確保您在鎖定/解鎖互斥鎖時不會遇到競爭狀況。 – Hayt
「我已經爲這些變量實現了互斥體」 - 不,你沒有**實現**互斥體;你已經**使用了**互斥體。 –