C ++在使用map时我们需要互斥吗?

时间:2013-09-21 23:03:08

标签: c++ map mutex

我有两个线程,一个是插入,另一个是删除地图中的一个条目。我想知道我是否有这些函数调用的互斥量?还有一个线程在此映射内递增计数器,另一个递减该计数器。我也需要互斥量吗?

谢谢,

2 个答案:

答案 0 :(得分:2)

需要同步对地图本身的更改(插入,删除)。遍历和查找也是如此(即begin()find()[]等。)

但是,多个线程可以安全地访问不同的元素

答案 1 :(得分:0)

如果要递增和递减map中的SAME元素(或者可能是相同的元素而您无法确定),那么您需要进行某种同步。您可以使用std::atomic<int>来避免使用mutex tho'。

树中的任何插入或删除都需要使用mutex或类似的保护 - 当然,这也意味着对树内容的任何访问都需要以相同的方式进行保护,因此,如果您使用std::map<T>::iterator(至少在树中erase)将失效。因此,您确实需要确保在使用对树的任何其他访问时不会发生erase。这包括“现成的”功能,例如find