Безопасна ли функция find() unordered_map при работе с unordered_map через несколько потоков [дубликат]Linux

Ответить
Гость
 Безопасна ли функция find() unordered_map при работе с unordered_map через несколько потоков [дубликат]

Сообщение Гость »


uint16_t GetLevel (константная строка и тег) { static auto *tagMap = new std::unordered_map(); статическийshared_timed_mutex* mtx = новыйshared_timed_mutex; std::decay::type::iterator it; { //Блокировка ReadLock(*mtx); это = tagMap-> найти (тег); } if (it == tagMap->end()) { // новый тег Блокировка InsertLock(*mtx); это = tagMap-> найти (тег); // обеспечено, что два потока выполнили вышеуказанное условие if (it == tagMap->end()) { автоматический результат = tagMap->insert({tag, 1}); если (!result.секунда) { вернуть 0; } это = результат.первый; } } вернуть его->секунду; } Если tagMap->find(tag) не заблокирован с помощью readLock ранее, когда tagMap выполняет tagMap->insert(...) в другом потоке, безопасно ли tagMap->find(tag)?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»