STL Map或HashMaps线程是否安全?

Mat*_*att 4 c++ stl

我可以在多线程程序中使用映射或散列映射而无需锁定吗?即它们是否安全?

我想要同时在地图上添加和删除.

那里似乎有很多相互矛盾的信息.

顺便说一下,我正在Ubuntu 10.04下使用GCC附带的STL库

编辑:就像互联网的其他部分一样,我似乎得到了相互矛盾的答案?

Art*_*yom 14

您可以安全地执行同时读取操作,即调用const成员函数.但是如果其中一个涉及写入,则不能同时执行任何操作,即非const成员函数的调用对于容器应该是唯一的,并且不能与任何其他调用混合.

即你不能从多个线程更改容器.因此,您需要使用lock/rw-lock来确保访问安全.

  • 我认为这个答案有点令人困惑,从这个答案可以推断,在*one*write操作进行时进行多次读取是线程安全的,这是不正确的.另外,我认为你的意思是*同时*而不是模拟? (2认同)

Ste*_*dit 5

不。

诚实。不。

编辑

好的,我会合格的。

您可以让任意数量的线程读取同一个地图。这是有道理的,因为阅读它没有任何副作用,所以其他人是否也在这样做并不重要。

但是,如果您想写入它,那么您需要获得独占访问权限,这意味着在您完成之前防止任何其他线程写入读取。

您最初的问题是关于并行添加和删除。由于这两个都是写入,因此它们是否是线程安全的答案是一个简单、明确的“否”。