gpt4 book ai didi

c++ - 子字大小标志的线程安全

转载 作者:搜寻专家 更新时间:2023-10-31 01:17:48 25 4
gpt4 key购买 nike

考虑以下场景:

  1. 存在一个全局可访问的变量F
  2. 线程 A 重复分配一个随机值给 F(不考虑 F 的先前值)。
  3. 线程 B 与线程 A 做同样的事情(独立于 A)。
  4. 线程 C 重复读取 F 的值(并打印它)。

这是在 x64 体系结构、多处理器的 Windows 上的 C++ (Visual C++) 中。 F 的类型为 bool 并标记为 volatile,并且所有访问都不受任何锁的保护。

问题:这种情况是否存在线程不安全的问题?

假设代码的逻辑行为是有效的,那么多个线程同时在同一位置读取和写入值是否有任何不安全的地方?

对于平台上 <= 字长的变量的读写原子性,可以做出什么保证(跨架构、操作系统、编译器)? (我假设字长很重要...)

在相关说明中,什么是在线程之间传递某些操作完成状态的可接受方式(没有线程正在等待操作完成,它们可能只是对不时查询状态感兴趣)?

最佳答案

这取决于您的线程安全要求。您将始终获得一致的值(也就是说,您不可能获得线程 A 的写入值的一半而另一半来自线程 B),但是不能保证您获得的值事实上,'ll read 是逻辑上写的最新的。

这里的问题是 CPU 缓存可能会或可能不会被刷新。当线程写入内存时,值首先进入缓存,最后写入内存。在此期间,如果其他内核尝试从内存中读取对象,它们将获得旧值。

关于c++ - 子字大小标志的线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7782847/

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