在C/C++中,是否保证在线程之间最终具有一致的语义的易失性变量?
是否有任何通常遵循的标准(ISO C或C,或
任何POSIX / SUS规范),一个变量(也许 标记为volatile),不被互斥体保护,正在被访问 多线程将成为最终一致如果是 分配给? 要提供一个具体的例子,考虑两个线程共享一个 主题1: 线程2: 线程2是否最终终止终止?还是可以的 我知道C和C标准(C 0x之前)不说话 解决方法
这将取决于你的架构.虽然需要显式缓存刷新或内存同步以确保内存写入对其他线程可见,但并不排除它,但我确实遇到了平台(包括目前正在开发的基于PowerPC的设备),其中显式指令必须执行以确保状态被刷新.
请注意,线程同步原语(如互斥体)将根据需要执行必要的工作,但是您通常不需要线程同步原语,如果您想要的是确保状态是可见的,而不关心一致性 – 只是sync / flush指令将足够了. 编辑:对于仍然在讨论volatile关键字的任何人来说 – 挥之不去的保证,编译器不会生成显式地将数据缓存在寄存器中的代码,但这与处理透明地缓存/重新排序读取和写入的硬件不同.阅读例如this或this或this Dr Dobbs博士文章或this SO问题的答案,或者选择您喜欢的编译器,目标是像Cell这样的弱一致的内存架构,编写一些测试代码,并比较编译器生成的内容与您需要的内容以确保写入对其他进程可见. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |