Я знаю, что контейнеры STL не являются потокобезопасными, но я думаю, что они должны быть безопасны только для одновременного чтения. Программа, над которой я работаю, показывает неожиданные небольшие изменения, когда я переключил ее с монопоточности на многопоточность. Безуспешно просматривая свой код и возможные ошибки, я начинаю сомневаться в своих убеждениях.
Является ли unordered_map
безопасным только для одновременного чтения? Существование ключей проверяется, если они существуют, для чтения значения используется оператор []
, и разные потоки могут одновременно читать один и тот же ключ.
unordered_map::find
возвращает итератор к найденному элементу, поэтому вы можете проверить существование ключа и прочитать значение за один раз. Нет необходимости в дополнительном поиске сoperator[]
- person Chris Drew   schedule 29.11.2016