gpt4 book ai didi

C++ 如果一个线程写入后切换一个 bool 值,那么在另一个线程的循环中读取该 bool 值是否安全?

转载 作者:太空狗 更新时间:2023-10-29 20:10:12 25 4
gpt4 key购买 nike

我正在构建一个非常简单的程序作为练习。

这个想法是通过递归遍历目录的所有内容,并对目录(及其子目录)中包含的所有文件的大小求和来计算目录的总大小。

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

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

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

最佳答案

是的,这是必要的。

问题在于,处理器的不同内核可能对“相同”数据有不同的看法,尤其是缓存在 CPU 中的数据。 atomic 部分确保正确刷新这些缓存,以便您可以安全地执行您尝试执行的操作。

否则,另一个线程很可能永远不会真正看到第一个线程的标志更改。

关于C++ 如果一个线程写入后切换一个 bool 值,那么在另一个线程的循环中读取该 bool 值是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41212494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com