我应该互斥锁一个变量吗?

Wil*_*ill 11 c embedded

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

我正在研究32位ARM嵌入式系统.编译器似乎始终对齐32位变量,因此可以使用单个指令读取或写入它们.如果32位变量未对齐,则读取或写入将被分解为多个指令,第二个线程可能会读取损坏的值.

如果我将来迁移到多核系统并且变量在核心之间共享,那么这个问题的答案是否会改变?(假设核心之间有共享缓存)

谢谢!

caf*_*caf 8

互斥锁可以保护您免受撕裂 - 例如某些ARM实现使用无序执行,而互斥锁将包含可能对您的算法正确性所必需的内存(和编译器)障碍.

包含互斥锁更安全,然后找出一种方法来优化它,如果它显示为性能问题.

另请注意,如果您的编译器是基于GCC的,则可以访问GCC原子内置函数.