Нужно ли блокировать контейнеры STL, чтобы прочитать их данные? - PullRequest
4 голосов
/ 17 апреля 2011

Я пишу многопоточный сервер, который содержит 5 или 6 глобальных структур данных (карты, векторы и т. Д.) И пытаюсь выяснить, нужно ли мне хранить мьютексы для определенных данных, чтобы считывать значения из картили векторы, или если необходимо только удерживать мьютекс, когда я собираюсь изменить данные / добавить новые элементы.

1 Ответ

5 голосов
/ 17 апреля 2011

Вам необходимо синхронизировать доступ к контейнеру, если несколько потоков обращаются к контейнеру и хотя бы один из этих потоков изменяет содержимое контейнера. Если ни один из потоков не изменяет содержимое контейнера, вам не нужно синхронизировать доступ к нему.

[Обратите внимание, что в стандарте языка C ++ не упоминаются потоки (по крайней мере, пока), поэтому совершенно необязательно, чтобы контейнеры можно было использовать из нескольких потоков. Тем не менее, то, что я сказал выше, верно по крайней мере для всех основных реализаций Стандартной библиотеки и является требованием в предстоящей редакции C ++ 0x к Стандарту языка C ++.]

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