Параллельность с const std :: T's - PullRequest
5 голосов
/ 07 марта 2012

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

Ответы [ 3 ]

4 голосов
/ 07 марта 2012

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

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

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

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

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

Потоковая безопасность std :: map для операций только для чтения

Безопасен ли C ++ std :: set для потоков?

0 голосов
/ 07 марта 2012

прочитайте тему ниже:

мне кажется похожим на то, что вы спрашиваете:

Потоковая безопасность std :: map для операций только для чтения

0 голосов
/ 07 марта 2012

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

...