Wil*_*ill 11 c embedded
如果在多个线程之间共享一个32位变量,我应该在变量周围放置一个互斥锁吗?例如,假设1个线程写入32位计数器,第2个线程读取它.第二个线程是否有可能读取损坏的值?
我正在研究32位ARM嵌入式系统.编译器似乎始终对齐32位变量,因此可以使用单个指令读取或写入它们.如果32位变量未对齐,则读取或写入将被分解为多个指令,第二个线程可能会读取损坏的值.
如果我将来迁移到多核系统并且变量在核心之间共享,那么这个问题的答案是否会改变?(假设核心之间有共享缓存)
谢谢!
caf*_*caf 8
互斥锁可以保护您免受撕裂 - 例如某些ARM实现使用无序执行,而互斥锁将包含可能对您的算法正确性所必需的内存(和编译器)障碍.
包含互斥锁更安全,然后找出一种方法来优化它,如果它显示为性能问题.
另请注意,如果您的编译器是基于GCC的,则可以访问GCC原子内置函数.
归档时间:
14 年,8 月 前
查看次数:
1751 次
最近记录: