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