Fw: [問題] bool變數一寫多讀需要鎖嗎

作者: SFGEX (SFGEX)   2026-02-12 14:49:33
※ [本文轉錄自 C_and_CPP 看板 #1fZ7vDfQ ]
作者: SFGEX (SFGEX) 看板: C_and_CPP
標題: [問題] bool 64bit機器上一寫多讀需要鎖嗎
時間: Wed Feb 11 21:04:11 2026
開發平台(Platform): (Ex: Win10, Linux, ...)
Linux 64 位元指令集
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
gcc
問題(Question):
bool型別之類的簡單變數
Single Store & Multiple Load本身有組合語言層級的原子性保證
請問~~
所以有做好memory barrier的前提下
一寫多讀bool是不是完全不用鎖?
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
Writer thread:
do_something();
smp_wmb();
global_flag = true;
Multiple Reader threads:
if (global_flag) {
smp_rmb()
do_other_things()
}
作者: ManOfSteel (Man Of Steel)   2025-02-12 00:10:00
我想請問一下,你是怎麼知道bool型別支援single write和 multiple load?參考這個網頁:https://en.cppreference.com/w/c/language/memory_model.html這一段話:When an汢valuation漑f an expression writWhen an汢valuation of an expression writes to a meand another evaluation reads or modifies the samememory location, the expressions are said to氲onf所以data race 是只要有一個 write 搭配其它 read 或write 就會是發生。
作者: LPH66 (-6.2598534e+18f)   2025-02-12 01:50:00
另外, 就算 x86 組合語言只有一條, CPU 微指令可能有好幾條
作者: if4 (if)   2025-02-12 07:19:00
請問這題適合轉 Linux 板嗎?
作者: SFGEX (SFGEX)   2025-02-12 14:40:00
應該說我只知道賦值跟讀變數都只有一條組語但複雜操作例如++ , swap會有多條 一定不行然後store load 即使底下還有微指令讀寫這個快取上byte也是原子性的不會說store更新了4bit還有4bit沒更新其他cpu 或是同一個cpu load這塊快取要馬新要馬舊應該是整個8bit 全舊全新選一個而已?
作者: leolarrel (真.粽子無雙)   2026-02-24 13:01:00
bool 若是底層組語用暫存器實現,我認為是可不用鎖,但bool 變數其實也可以用記憶體實現此變數, 所以我不敢說用bool 就一定不用鎖,還好kernel 有相關ATOMC巨集可用

Links booklink

Contact Us: admin [ a t ] ucptt.com