0

我有两个线程,一个正在插入,另一个正在删除地图中的条目。我想知道我是否有围绕这些函数调用的互斥锁?还有一个线程在这个映射中增加一个计数器,另一个减少那个计数器。我也需要互斥锁吗?

谢谢,

4

2 回答 2

3

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

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

于 2013-09-21T23:05:22.640 回答
0

如果您正在增加和减少 SAME 中的元素map(或者可能是相同的元素,您不能确定),那么您需要进行某种同步。您可以使用 anstd::atomic<int>来避免必须使用mutextho'。

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

于 2013-09-21T23:17:53.370 回答