C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了C如果一个线程写完切换bool一次,是否可以安全地在一个其他线程的循环中读取bool?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个非常简单的程序作为练习.

这个想法是通过递归迭代其所有内容,并总结目录(及其子目录)中包含的所有文件的大小来计算目录的总大小.

为了向用户显示程序仍在工作,此计算在另一个线程上执行,而主线程打印一个点.每秒一次.

现在主线程当然需要知道什么时候应该停止打印点并且可以查找结果.
可以使用例如std :: atomic< bool>做(假);并将其传递给将执行计算的线程,一旦完成将其设置为true.但我想知道在这个简单的情况下(一个线程写完一次,一个线程周期性地读取直到非零),有必要使用原子数据类型.显然,如果多个线程可能写入它,则需要对其进行保护.但在这种情况下,只有一个写作线程和一个阅读线程.

是否有必要在这里使用原子数据类型,或者它是否过度,是否可以使用普通数据类型?

解决方法

@H_262_18@ 是的,这是必要的.规则是如果两个线程可能同时访问同一个内存,并且至少有一个线程是编写器,那么您就有数据竞争.具有数据争用的程序的任何执行都具有未定义的行为.

C 14标准的相关引用:

1.10 / 23

1.10 / 6

大佬总结

以上是大佬教程为你收集整理的C如果一个线程写完切换bool一次,是否可以安全地在一个其他线程的循环中读取bool?全部内容,希望文章能够帮你解决C如果一个线程写完切换bool一次,是否可以安全地在一个其他线程的循环中读取bool?所遇到的程序开发问题。

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

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