gpt4 book ai didi

c++ - 基于以下场景同步两个线程的最佳方法?

转载 作者:行者123 更新时间:2023-11-30 04:29:44 24 4
gpt4 key购买 nike

这对于一个问题来说可能听起来很基础,但我从来没有得到过正式的(如果有的话)答案。

同步以下内容的最佳方式(有效方式)是什么:

  • 线程 1: while(1) 读取(共享数据)

  • 线程 2: while(1) 锁(shared_mutex) 写(共享数据) 解锁(共享互斥锁)

如果线程 1 只是读取数据,它是否也需要锁定互斥量?或者只是写线程需要这样做?

谢谢

最佳答案

简短回答所有访问共享数据的线程都需要获取保护该数据的锁。

长答案 如果读取器不锁定数据以读取它,如果写入线程正在写入数据而读取器正在读取数据,则线程可能最终读取损坏的数据。在现代多核/多处理器世界中,不要指望任何数据类型都可以原子安全地读取或写入。

编辑(Shahbaz):事实上,在您的示例中,Thread 2 始终成功锁定互斥量,因此根本没有同步发生。在您的简单情况下,答案也很简单:

Thread 1:
while(1)
lock(shared_mutex)
read(shared_data)
unlock(shared_mutex)

Thread 2:
while(1)
lock(shared_mutex)
write(shared_data)
unlock(shared_mutex)

关于c++ - 基于以下场景同步两个线程的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9168790/

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