gpt4 book ai didi

c++ - std::vector 更改的跨线程可见性仅与 Win32 事件同步

转载 作者:行者123 更新时间:2023-11-28 04:10:29 25 4
gpt4 key购买 nike

假设我有一个 std::vector<Item>类成员变量,其中 Item是一些有 getter 和 setter 的类。它是在一个线程 (#1) 中创建的,但由另一个线程 (#2) 填充 push_back秒。最后它在线程#1 中被读取。对其的访问仅与 Windows 同步 event objects .当 vector 被填满时,事件被设置为信号状态。

在这种情况下,我应该注意跨线程可见性问题(获取过时值)吗?如果是,如何避免这些问题?

最佳答案

Microsoft 表示等待事件对象就足够了。

根据 MSDN :

The following synchronization functions use the appropriate barriers to ensure memory ordering:

  • Functions that enter or leave critical sections
  • Functions that signal synchronization objects
  • Wait functions
  • Interlocked functions

这意味着如果线程 #1 看到发出信号的事件对象的副作用,它必须看到线程 #2 修改 vector 的副作用。

关于c++ - std::vector 更改的跨线程可见性仅与 Win32 事件同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57923568/

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