C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 一切都很不稳定大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在创建这个多线程C程序,并且在发布模式下编译时,我发现了这种类型的错误(对象仍为空),即看起来像缺少易失性标记.

但问题是,由于第二个工作线程涉及各种对象,这意味着程序中几乎所有东西都是易变的.

我想知道是否有办法关闭Apple LLVM编译器中的优化,这些优化会创建volatile关键字专门用于修复的错误.这些错误会出现在调试模式下(因为优化已关闭).将volatile放在各处基本上意味着在每个成员函数之后使用volatile来处理每个类,并在每个共享变量声明之前添加volatile.

我想我宁愿失去那种不稳定的优化而不是冒险出现虚假的错误,因为我忘了标记一些不稳定的东西.

解决方法

在C中,volatile与线程安全无关.你不能依赖它来避免数据竞争.其目的是强制对变量(来自单个线程,或使用其他机制彼此同步的线程)的同步访问完全按指定的顺序发生.在与硬件交互时,这通常是必要的,以防止看起来什么都不做但实际上影响硬件状态的访问被优化掉.它不保证不同步访问的效果.

要避免数据争用,必须使用原子操作或显式锁来同步对共享对象的访问. C 11在标准库中提供了这些;如果你被困在过去,那么你将不得不依赖于平台上可用的任何库(例如pthreads)或语言扩展(例如原子内在函数).

大佬总结

以上是大佬教程为你收集整理的c – 一切都很不稳定全部内容,希望文章能够帮你解决c – 一切都很不稳定所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。