我有兩個線程,稱它們爲服務器線程和計算線程。服務器線程啓動計算線程,向它傳遞一個指向布爾變量「停止標誌」的指針。當服務器線程將stop標誌設置爲true時,計算線程應退出其計算循環並從run函數返回。在線程之間共享不帶鎖的線程值C
我的問題是,有沒有什麼辦法安全地共享標誌兩個線程之間,而沒有使用任何鎖(互斥,信號等)?請記住:
- 標誌將被設置爲true,一旦
- 標誌決不會被設置回一次設置爲true
- 假的,只有一個服務器線程,並且只有一個計算線程
在這種情況下,我將「安全地」定義爲在服務器線程中將標誌設置爲true的任何方法都是保證在合理的時間內在計算線程中反映真實值的。 (如果你的答案包括「最終」一詞,它可能不符合「合理的時間」)。
我對便攜式和非便攜式解決方案都很感興趣。我在一個Linux平臺上運行,但除此之外還有一些靈活性:GCC,Clang,內核版本,C標準版本等。
合理的時間量取決於計算循環的內容。 – StoryTeller