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