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

看板Linux作者 (SFGEX)時間3周前 (2026/02/12 14:49), 3周前編輯推噓0(003)
留言3則, 1人參與, 1周前最新討論串1/1
※ [本文轉錄自 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() } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.27.23.35 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1770815053.A.A5A.html ※ 編輯: SFGEX (114.27.23.35 臺灣), 02/11/2026 21:20:20

02/12 00:10, 3周前 , 1F
我想請問一下,你是怎麼知道bool型別支援single write
02/12 00:10, 1F

02/12 00:10, 3周前 , 2F
和 multiple load?
02/12 00:10, 2F

02/12 00:19, 3周前 , 3F
02/12 00:19, 3F

02/12 00:19, 3周前 , 4F
uage/memory_model.html
02/12 00:19, 4F

02/12 00:20, 3周前 , 5F
這一段話:When an汢valuation漑f an expression writ
02/12 00:20, 5F

02/12 00:21, 3周前 , 6F
When an汢valuation of an expression writes to a me
02/12 00:21, 6F

02/12 00:21, 3周前 , 7F
and another evaluation reads or modifies the same
02/12 00:21, 7F

02/12 00:21, 3周前 , 8F
memory location, the expressions are said to氲onf
02/12 00:21, 8F

02/12 00:25, 3周前 , 9F
所以data race 是只要有一個 write 搭配其它 read 或w
02/12 00:25, 9F

02/12 00:25, 3周前 , 10F
rite 就會是發生。
02/12 00:25, 10F

02/12 01:50, 3周前 , 11F
另外, 就算 x86 組合語言只有一條, CPU 微指令可能有好幾條
02/12 01:50, 11F

02/12 07:19, 3周前 , 12F
請問這題適合轉 Linux 板嗎?
02/12 07:19, 12F

02/12 14:40, 3周前 , 13F
應該說我只知道賦值跟讀變數都只有一條組語
02/12 14:40, 13F

02/12 14:40, 3周前 , 14F
但複雜操作例如++ , swap會有多條 一定不行
02/12 14:40, 14F

02/12 14:47, 3周前 , 15F
然後store load 即使底下還有微指令
02/12 14:47, 15F

02/12 14:47, 3周前 , 16F
讀寫這個快取上byte也是原子性的
02/12 14:47, 16F

02/12 14:47, 3周前 , 17F
不會說store更新了4bit還有4bit沒更新
02/12 14:47, 17F

02/12 14:48, 3周前 , 18F
其他cpu 或是同一個cpu load這塊快取要馬新要馬舊
02/12 14:48, 18F

02/12 14:49, 3周前 , 19F
應該是整個8bit 全舊全新選一個而已?
02/12 14:49, 19F
※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: SFGEX (223.136.48.119 臺灣), 02/12/2026 14:49:33

02/24 13:01, 1周前 , 20F
bool 若是底層組語用暫存器實現,我認為是可不用鎖,但
02/24 13:01, 20F

02/24 13:02, 1周前 , 21F
bool 變數其實也可以用記憶體實現此變數, 所以我不敢說
02/24 13:02, 21F

02/24 13:02, 1周前 , 22F
用bool 就一定不用鎖,還好kernel 有相關ATOMC巨集可用
02/24 13:02, 22F
文章代碼(AID): #1fZNV-z- (Linux)
文章代碼(AID): #1fZNV-z- (Linux)