下面是我的代碼,其中兩個變量在回調時更新,每50ms調用一次。還有一個讀取器線程每隔50ms喚醒一次並讀取變量。併發讀寫
經過this後,我猜想會有一些情況,讀取的線程會在收到回調時喚醒,因爲我在讀寫時沒有鎖定相同的互斥量,在這種情況下,它會導致讀取的內存不一致。
但是,當我運行它時,這種情況永遠不會發生。是不是已經運行了足夠長的時間,還是在我的理解中有錯誤?
recursive_mutex mutex1
recursive_mutex mutex2
var1, var2
//called every 50ms
onUpdateListener() {
lock(mutex1)
update var1
update var2
}
VarReaderThread::readVar() {
sleep(50)
while(true) {
{
lock(mutex2)
read var1
read var2
sleep(50)
}
}
}
你的互斥體的'範圍'不清楚。 –
爲什麼要使用這些互斥鎖?是否有其他代碼訪問變量?因爲在這種情況下,它們完全沒用。 –
您不應該同時書寫和閱讀,否則可能會遇到不一致的狀態(競爭條件)。儘管可以同時執行讀取和讀取,但您不應該同時寫入和寫入。寫作不混合。使用單獨的鎖進行讀取和寫入將無濟於事。正如@HenkHolterman在那段代碼中暗示那些互斥體什麼都不做。 – Persixty