2012-03-07 1 views
5

В качестве примера рассмотрим std :: map, реализованную с деревом Splay. Такая древовидная структура изменчива и изменяется каждый раз, когда к карте обращаются для чтения. Когда карта const, кто должен гарантировать изоляцию одновременных чтений, зависит ли это от кода пользователя или реализации карты?Параллелизм с const std :: T's

+1

Я не думаю, что стандарт делает какое-либо заявление о параллельности контейнеров. –

+0

@OliCharlesworth: Это также верно для C++ 11? –

+0

это своего рода дубликат: http://stackoverflow.com/questions/1846186/thread-safety-of-stdmap-for-read-only-operations – CashCow

ответ

4

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

Вопрос заключается в том, может ли стандарт гарантировать безопасность потока, если одновременные потоки считывают только коллекцию.

Я не уверен, что старые стандарты C++ имели какие-либо гарантии безопасности потоков с любыми операциями вообще, но новый будет (раздел приведен в комментариях, 23.2.2). Как и сейчас, большинство поставщиков теперь обеспечивают безопасность потоков среди одновременных чтений, несмотря на то, что параллелизм внутри объектов, содержащихся в коллекции, очевидно, должен обрабатываться пользователем.

Точно так же вы могли бы использовать блокировки чтения и записи в коллекции STL.

Это родственный вопрос о переполнении стека:

Thread safety of std::map for read-only operations

Is the C++ std::set thread-safe?

-1

std::* не гарантирует безопасность ниток.

+0

Фактически раздел 23.2.2 C++ 11 определяет гарантии гонки данных на стандартных контейнерах. –

+0

ok, я имею в виду C++ 03 – triclosan

Смежные вопросы