我可以在多线程程序中使用映射或散列映射而无需锁定吗?即它们是否安全?
我想要同时在地图上添加和删除.
那里似乎有很多相互矛盾的信息.
顺便说一下,我正在Ubuntu 10.04下使用GCC附带的STL库
编辑:就像互联网的其他部分一样,我似乎得到了相互矛盾的答案?
Art*_*yom 14
您可以安全地执行同时读取操作,即调用const成员函数.但是如果其中一个涉及写入,则不能同时执行任何操作,即非const成员函数的调用对于容器应该是唯一的,并且不能与任何其他调用混合.
即你不能从多个线程更改容器.因此,您需要使用lock/rw-lock来确保访问安全.
不。
诚实。不。
编辑
好的,我会合格的。
您可以让任意数量的线程读取同一个地图。这是有道理的,因为阅读它没有任何副作用,所以其他人是否也在这样做并不重要。
但是,如果您想写入它,那么您需要获得独占访问权限,这意味着在您完成之前防止任何其他线程写入或读取。
您最初的问题是关于并行添加和删除。由于这两个都是写入,因此它们是否是线程安全的答案是一个简单、明确的“否”。