3

我想知道假设如果多个线程正在访问单个静态容器(boost::unordered_map)是否安全,如果多个线程只从容器中读取数据,则不需要锁定对容器的访问。并且没有写完

4

1 回答 1

8

当多个线程只读不写操作时,不需要同步访问。

C++11 标准的第 1.10 段将关于数据竞争的冲突操作定义为:

如果其中一个修改了内存位置 (1.7) 而另一个访问或修改了相同的内存位置,则两个表达式求值会发生冲突。

当然,根据 1.10/21:

如果程序的执行在不同的线程中包含两个相互冲突的操作,则该程序的执行包含数据竞争,其中至少一个不是原子的,并且两者都不会在另一个之前发生。[...]

于 2013-05-13T19:45:25.647 回答