[英]read/write to variable between main thread and worker thread
在多线程 C++ 桌面应用程序中,如果主线程有一个主循环,其中:
如果主线程和工作线程之间的读/写从不同时发生,该变量是否需要同步? 那就是主线程读取/写入变量,调用线程,然后等待线程完成,然后再次读取/写入变量。
注意:下面的答案假设工作线程是由主线程创建并加入的(事实证明这是错误的 - 请参阅下面的更新)。
如果您确定主线程在工作线程启动之前正在访问共享数据,并且只有在工作线程加入时才会访问它,
那么你不需要同步。
这是因为创建一个新线程(并加入它)可以保证创建一个同步屏障。
这意味着主线程所做的更改将对新线程可见。 当新线程完成并加入时,它所做的更改将对主线程可见。
您可以在此问题的答案中看到更多信息: 生成线程是否会自行提供内存顺序保证? .
更新:
正如您在下面的 OP 评论中看到的那样,实际上并未创建新线程。 而是使用使用线程池的库。 在这种情况下,同步的需要取决于库的实现。
如果您不确定 - 您最好使用同步机制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.