看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
ManOfSteel: 我想請問一下,你是怎麼知道bool型別支援single write 02/12 00:10
ManOfSteel: 和 multiple load? 02/12 00:10
ManOfSteel: 參考這個網頁:https://en.cppreference.com/w/c/lang 02/12 00:19
ManOfSteel: uage/memory_model.html 02/12 00:19
ManOfSteel: 這一段話:When an汢valuation漑f an expression writ 02/12 00:20
ManOfSteel: When an汢valuation of an expression writes to a me 02/12 00:21
ManOfSteel: and another evaluation reads or modifies the same 02/12 00:21
ManOfSteel: memory location, the expressions are said to氲onf 02/12 00:21
ManOfSteel: 所以data race 是只要有一個 write 搭配其它 read 或w 02/12 00:25
ManOfSteel: rite 就會是發生。 02/12 00:25
LPH66: 另外, 就算 x86 組合語言只有一條, CPU 微指令可能有好幾條 02/12 01:50
if4: 請問這題適合轉 Linux 板嗎? 02/12 07:19
SFGEX: 應該說我只知道賦值跟讀變數都只有一條組語 02/12 14:40
SFGEX: 但複雜操作例如++ , swap會有多條 一定不行 02/12 14:40
SFGEX: 然後store load 即使底下還有微指令 02/12 14:47
SFGEX: 讀寫這個快取上byte也是原子性的 02/12 14:47
SFGEX: 不會說store更新了4bit還有4bit沒更新 02/12 14:47
SFGEX: 其他cpu 或是同一個cpu load這塊快取要馬新要馬舊 02/12 14:48
SFGEX: 應該是整個8bit 全舊全新選一個而已? 02/12 14:49
SFGEX:轉錄至看板 Linux 02/12 14:49 ※ 編輯: SFGEX (223.136.48.119 臺灣), 02/12/2026 14:58:20
wulouise: 你用atomic寫然後看assembly吧 02/12 18:48