Контейнеры STL только для чтения - PullRequest
1 голос
/ 26 ноября 2009

Нужен совет: какой из контейнеров STL считается доступным только для чтения? Возьмем vector<int> в качестве примера. Можно ли с уверенностью сказать, что любая операция, которая не изменяет базовые данные int, доступна только для чтения? Я пишу многопоточную программу, но не слишком уверен, что потокобезопасно передавать контейнер по ссылке / указателю.

Между тем, будут ли те же правила применяться и к basic_string? Любой рекомендуемый ресурс, который помогает быстро получить представление о внутреннем механизме контейнера STL? Спасибо.

Ответы [ 4 ]

1 голос
/ 26 ноября 2009

Объявленные методы const, скорее всего, не изменят контейнер, хотя вы не уверены.

При использовании контейнеров STL в многопоточном приложении вам потребуется внешний механизм синхронизации. Стандартная библиотека C ++ не является поточно-ориентированной, и любое использование из нескольких потоков без синхронизации приведет к неопределенному поведению, если предположить, что один из потоков изменит состояние векторного объекта.

1 голос
/ 26 ноября 2009

Кстати, в стандарте ничего не говорится о безопасности контейнеров. Но метод, отмеченный const, гарантированно не изменит контейнер. *

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

** Логически модифицируйте, то есть. Хотя я не знаю никаких контейнеров из-под контроля, любые изменяемые члены могут меняться в методах const. *

0 голосов
/ 19 января 2010

Единственное, что упомянуто в стандарте, это

  • Несколько считывателей являются потокобезопасными (duhhhhhh)
  • Несколько модулей записи в разные контейнеры являются потокобезопасными (опять-таки, да ... но поменьше :), это означает, что ни одна реализация не может иметь статических членов, модификация которых может поставить под угрозу безопасность потоков
0 голосов
/ 26 ноября 2009

Используйте блокировки чтения-записи pthread в многопоточном поточном окружении при работе с контейнерами stl. Они довольно эффективны. Ссылка на блокировку чтения-записи pthread:

Pthread Read Write Locks - Yolinux

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