【发布时间】:2017-03-29 21:36:10
【问题描述】:
我正在阅读 Bjarne 在 Memory Model 上的常见问题解答,这是一个引用
因此,C++11 保证“单独的内存位置”不会发生此类问题。更准确地说:除非它们都是读访问,否则两个线程无法在没有某种形式的锁定的情况下安全地访问内存位置。请注意,单个单词中的不同位域不是单独的内存位置,因此不要在没有某种形式的锁定的情况下在线程之间与位域共享结构。除此之外,C++ 内存模型只是“正如每个人所期望的那样。”
但是,直接思考低级并发问题并不总是那么容易。考虑:
从 x==0 和 y==0 开始
如果 (x) y = 1; // 线程 1
如果 (y) x = 1; // 线程 2
这里有问题吗?更准确地说,是否存在数据竞赛? (不,没有)。
我的问题是,为什么没有数据竞赛?对我来说很明显存在数据竞争,因为线程 1 是 y 的写入器,而线程 2 是 y 的读取器,x 的读取器也是如此。
【问题讨论】:
-
这里以(0,0)开头是重点
标签: c++ multithreading c++11