std::multimap
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 05.07.18 10:27
Оценка:
Поясните по многопоточности мультимэпы. Являются ли операции удаления и доабвления потокобезопасными? Бдует ли двойное удаление разных элементов из мультимэпы которое приводит к перебаласировке дерева потокобезопсным?
  Скрытый текст
Вот этого я что-т оне понял.

The container is modified.
The elements removed are modified. Concurrently accessing other elements is safe, although iterating ranges in the container is not.

Sic luceat lux!
Re: std::multimap
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 05.07.18 10:40
Оценка: +1
Здравствуйте, Kernan, Вы писали:

K>Поясните по многопоточности мультимэпы. Являются ли операции удаления и доабвления потокобезопасными? Бдует ли двойное удаление разных элементов из мультимэпы которое приводит к перебаласировке дерева потокобезопсным?

K>
  Скрытый текст
K>Вот этого я что-т оне понял.
K>

K>The container is modified.
K>The elements removed are modified. Concurrently accessing other elements is safe, although iterating ranges in the container is not.


Видимо, ответ был дан в теме про мапу

All const member functions can be called concurrently by different threads on the same container. In addition, the member functions begin(), end(), rbegin(), rend(), front(), back(), data(), find(), lower_bound(), upper_bound(), equal_range(), at(), and, except in associative containers, operator[], behave as const for the purposes of thread safety (that is, they can also be called concurrently by different threads on the same container). More generally, the C++ standard library functions do not modify objects unless those objects are accessible, directly or indirectly, via the function's non-const arguments, including the this pointer.

Т.е. всё константое можно, а не константное нельзя вызывать без многопоточной защиты.
Sic luceat lux!
Отредактировано 05.07.2018 10:40 Kernan . Предыдущая версия .
Re: std::multimap
От: vopl Россия  
Дата: 05.07.18 10:42
Оценка: 6 (1)
Здравствуйте, Kernan, Вы писали:

K>Поясните по многопоточности мультимэпы. Являются ли операции удаления и доабвления потокобезопасными?

Нет, смотри тут, раздел Thread safety — потокобезопасными является только константные методы контейнера. Вставка-удаление к ним не относятся, поэтому не потокобезопасны.

K>Бдует ли двойное удаление разных элементов из мультимэпы которое приводит к перебаласировке дерева потокобезопсным?

Так как одинарное удаление не является потокобезопасным то двойное удаление — не является потокобезопасным вдвойне, независимо от перебалансировки
Re[2]: std::multimap
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 05.07.18 10:45
Оценка:
Здравствуйте, vopl, Вы писали:

V>Так как одинарное удаление не является потокобезопасным то двойное удаление — не является потокобезопасным вдвойне, независимо от перебалансировки

Да, я уже разобрался. Написано у них конечно завуалировано... нет бы написать НЕТ, ЭТО НЕПОТОКБЕЗОПАСНО.
Sic luceat lux!
Отредактировано 05.07.2018 10:48 Kernan . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.