0 c++ multithreading unordered-map thread-safety
我想建立一个unordered_map,同时从一个写入器和多个读取线程进行访问。编写器将仅插入一对,而不删除或更新插入的任何内容。这个线程安全吗?我可以将插入操作视为原子操作吗?我对代码进行了多次测试,未发现崩溃或错误结果。
谢谢!
不,这不是线程安全的。您必须确保unoredered_map
在修改过程中没有人正在阅读。例如,如果由于导致地图需要重新整理,insert
那么即使它是一个不同的元素,您也可以尝试读取正在修改的数据。
这样做的规则是:如果共享数据被多个线程访问,并且其中至少一个是写线程,则必须具有同步。
这并不是说您需要在阅读时屏蔽所有读者。您可以使用a std::shared_mutex
来允许多个阅读器同时阅读,但是当作家需要书写时,它将阻止所有阅读器。