但问题是,由于第二个工作线程涉及各种对象,这意味着程序中几乎所有东西都是易变的.
我想知道是否有办法关闭Apple LLVM编译器中的优化,这些优化会创建volatile关键字专门用于修复的错误.这些错误不会出现在调试模式下(因为优化已关闭).将volatile放在各处基本上意味着在每个成员函数之后使用volatile来处理每个类,并在每个共享变量声明之前添加volatile.
我想我宁愿失去那种不稳定的优化而不是冒险出现虚假的错误,因为我忘了标记一些不稳定的东西.
解决方法 在C中,volatile与线程安全无关.你不能依赖它来避免数据竞争.其目的是强制对变量(来自单个线程,或使用其他机制彼此同步的线程)的同步访问完全按指定的顺序发生.在与硬件交互时,这通常是必要的,以防止看起来什么都不做但实际上影响硬件状态的访问被优化掉.它不保证不同步访问的效果.要避免数据争用,必须使用原子 *** 作或显式锁来同步对共享对象的访问. C 11在标准库中提供了这些;如果你被困在过去,那么你将不得不依赖于平台上可用的任何库(例如pthreads)或语言扩展(例如原子内在函数).
总结以上是内存溢出为你收集整理的c – 一切都很不稳定全部内容,希望文章能够帮你解决c – 一切都很不稳定所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)