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

看板C_and_CPP (C/C++)作者 (SFGEX)時間1天前 (2026/02/11 21:04), 12小時前編輯推噓4(4016)
留言20則, 5人參與, 9小時前最新討論串1/1
開發平台(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, 1天前 , 1F
我想請問一下,你是怎麼知道bool型別支援single write
02/12 00:10, 1F

02/12 00:10, 1天前 , 2F
和 multiple load?
02/12 00:10, 2F

02/12 00:19, 1天前 , 3F
02/12 00:19, 3F

02/12 00:19, 1天前 , 4F
uage/memory_model.html
02/12 00:19, 4F

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

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

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

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

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

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

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

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

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

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

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

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

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

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

02/12 14:49, 13小時前 , 19F
應該是整個8bit 全舊全新選一個而已?
02/12 14:49, 19F
SFGEX:轉錄至看板 Linux 02/12 14:49 ※ 編輯: SFGEX (223.136.48.119 臺灣), 02/12/2026 14:58:20

02/12 18:48, 9小時前 , 20F
你用atomic寫然後看assembly吧
02/12 18:48, 20F
文章代碼(AID): #1fZ7vDfQ (C_and_CPP)
文章代碼(AID): #1fZ7vDfQ (C_and_CPP)