gpt4 book ai didi

c - 我应该互斥锁定单个变量吗?

转载 作者:太空狗 更新时间:2023-10-29 16:43:53 25 4
gpt4 key购买 nike

如果一个 32 位变量在多个线程之间共享,我应该在该变量周围放置一个互斥锁吗?例如,假设 1 个线程写入一个 32 位计数器,而第二个线程读取它。第二个线程是否有可能读取损坏的值?

我正在开发 32 位 ARM 嵌入式系统。编译器似乎总是对齐 32 位变量,以便可以用一条指令读取或写入它们。如果 32 位变量未对齐,则读取或写入将分解为多条指令,第二个线程可能会读取损坏的值。

如果我将来转向多核系统并且变量在内核之间共享,这个问题的答案会改变吗? (假设核心之间共享缓存)

谢谢!

最佳答案

互斥不仅可以保护您免受撕裂 - 例如,某些 ARM 实现使用乱序执行,并且互斥将包括内存(和编译器)屏障,这对于您的算法的正确性可能是必需的。

包含互斥锁更安全,如果它显示为性能问题,则稍后想办法优化它。

另请注意,如果您的编译器是基于 GCC 的,您可能可以访问 GCC atomic builtins .

关于c - 我应该互斥锁定单个变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6553152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com