簡單版:在一個C++程序中,我使用兩個不同的線程來處理一些整數變量。但我相信一個人總是在寫一些價值,另一個人只是在閱讀那篇文章。在讀取/寫入數據時是否還需要使用互斥鎖?確實需要使用互斥鎖嗎?
現在的細節:主要思想是第一個線程生成一些信息並將它們保存到一個數組中,第二個線程從該數組中讀取數據並處理它們。這個數組表示一個隊列。這意味着我有兩個索引值指向隊列中的第一個和最後一個項目。現在我想知道,如果我在讀取或寫入數值時必須鎖定這兩個索引值,還是可以不鎖定地檢查它們?請注意,生成器線程是queue_back的唯一線程更改索引,並且處理器線程具有更改queue_front的獨佔權限。
如果我正在爲基於Linux的系統開發任何更改,並使用gcc編譯代碼。 PS:在一些使用線程的代碼中,我看到關鍵字volatile
圍繞着不同線程之間共享的變量,我是否也需要使用它呢?
如果未使用volatile,其他線程可能會或可能不會看到對該變量所做的更改。 –