Могу ли я получить счет из hash_map при добавлении в него некоторых элементов? - PullRequest
2 голосов
/ 28 июня 2011

Как для Windows, так и для Linux:

В многопоточных приложениях, если мне совершенно безразлично, когда получается счетчик hash_map, тогда я могу безопасно вызвать {hash_map} .size ()в то время как все еще позволяют другим потокам добавлять / удалять элементы в этом {hash_map}?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 28 июня 2011

Это сильно зависит от типа вашего hash_map. Если это std::unordered_map, то ответ будет NO --- одновременные вызовы функций-членов из отдельных потоков не допускаются, если какой-либо из них не является const функцией-членом.

Если, с другой стороны, вы используете тип, предназначенный для одновременного доступа, тогда вполне может быть да.

3 голосов
/ 28 июня 2011

Нет

Контейнеры STL (если это то, что вы используете) не являются поточно-ориентированными.

size (), вероятно, обойдется и посчитает числа.Модификация этой структуры данных, пока идет другой поток, опасна (то есть опасна, как пьяный слон на минном поле).

Я бы порекомендовал обернуть ваш hash_map некоторыми функциями, которые обновляют счет отдельно, как атомарное.целое число.Это значение не будет точным, но, вероятно, будет достаточно близким, и это уменьшит конфликт потоков между операциями size () и вставки / стирания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...