繁体   English   中英

读/写主线程和工作线程之间的变量

[英]read/write to variable between main thread and worker thread

在多线程 C++ 桌面应用程序中,如果主线程有一个主循环,其中:

  • 它读/写一个变量,然后
  • 调用读取/写入该变量的线程

如果主线程和工作线程之间的读/写从不同时发生,该变量是否需要同步? 那就是主线程读取/写入变量,调用线程,然后等待线程完成,然后再次读取/写入变量。

注意:下面的答案假设工作线程是由主线程创建并加入的(事实证明这是错误的 - 请参阅下面的更新)。


如果您确定主线程在工作线程启动之前正在访问共享数据,并且只有在工作线程加入时才会访问它,
那么你不需要同步。

这是因为创建一个新线程(并加入它)可以保证创建一个同步屏障
这意味着主线程所做的更改将对新线程可见。 当新线程完成并加入时,它所做的更改将对主线程可见。

您可以在此问题的答案中看到更多信息: 生成线程是否会自行提供内存顺序保证? .


更新:
正如您在下面的 OP 评论中看到的那样,实际上并未创建新线程。 而是使用使用线程池的库。 在这种情况下,同步的需要取决于库的实现。
如果您不确定 - 您最好使用同步机制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM