Безопасна ли запись только в общий поток std :: unordered_map? - PullRequest
0 голосов
/ 31 января 2019

Скажем, у меня есть инициализированный, но пустой std :: unordered_map и два одновременных потока, которые будут заполнять его.Два потока будут писать только на карту, и ничего не будет считываться с карты, пока два потока не будут завершены.

Кроме того, эти два потока никогда не будут работать с одними и теми же ключами на карте.Например, скажем, что поток 1 будет заполнять ключи от «A» до «M», а поток 2 будет одновременно заполнять ключи от «N» до «Z».

Безопасен ли этот поток?

Inмоя текущая реализация, у меня есть 8 потоков, пишущих в один мьютекс std :: unordered_map способом, описанным выше.Очевидно, что мьютекс замедляет процесс (заполняется около 10 000 ключей), поэтому мне интересно, нужен ли мне вообще мьютекс.

Спасибо всем!

1 Ответ

0 голосов
/ 31 января 2019

Нет, это не потокобезопасно.Класс std::unordered_map не предоставляет каких-либо специальных гарантий безопасности потока, просто тот же самый обычный уровень безопасности потока, который все стандартные классы предоставляют по умолчанию.Это означает, что одному потоку небезопасно каким-либо образом получать доступ к структуре, в то время как другой поток изменяет или может изменять ее.

...