我有两个线程,一个正在插入,另一个正在删除地图中的条目。我想知道我是否有围绕这些函数调用的互斥锁?还有一个线程在这个映射中增加一个计数器,另一个减少那个计数器。我也需要互斥锁吗?
谢谢,
需要同步对地图本身的更改(插入、删除)。遍历和查找也是如此(即begin()
, find()
,[]
等)。
不过,多个线程可以安全地访问不同的元素。
如果您正在增加和减少 SAME 中的元素map
(或者可能是相同的元素,您不能确定),那么您需要进行某种同步。您可以使用 anstd::atomic<int>
来避免必须使用mutex
tho'。
树中的任何插入或删除都需要使用 amutex
或类似方法进行保护 - 当然,这也意味着对树内容的任何访问都需要以相同的方式进行保护,因此如果您使用std::map<T>::iterator
(至少对于erase
在树中)将无效。所以你真的需要确保erase
当你使用任何其他访问树时不会发生任何事情。这包括“现成的”功能,例如find
.