Size: a a a

2020 August 24

R

Ruben in pro.cxx
Переслано от Ruben
источник

R

Ruben in pro.cxx
Переслано от Ruben
C++ standard library implementations are required to avoid data races when different elements in the same sequence are modified concurrently.
источник

R

Ruben in pro.cxx
Ilia Zviagin
Неправильно
А как это понимать?
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Если доступ к уже созданным объектам, то безопасно
источник

R

Ruben in pro.cxx
Я об этом и говорил
источник

P

Pavel in pro.cxx
Там нужно уточнять, что параллельно не изменяется сам контейнер. В целом это можно про что угодно сказать - корректно реализоваеые константные методы вызывать из разных потоков потокобезопасно.
источник

IZ

Ilia Zviagin in pro.cxx
Ruben
Я об этом и говорил
Формулируй вопросы чётче.
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Pavel
Там нужно уточнять, что параллельно не изменяется сам контейнер. В целом это можно про что угодно сказать - корректно реализоваеые константные методы вызывать из разных потоков потокобезопасно.
std::map::operator[] безопасно вызывать для разных уже существующих элементов из разных потоков
источник

P

Pavel in pro.cxx
Artöm Bakri Al-Sarmini
std::map::operator[] безопасно вызывать для разных уже существующих элементов из разных потоков
Нет, оператор[] может создавать новые элементы, что может инвалидировать указатели на все остальные элементы
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Pavel
Нет, оператор[] может создавать новые элементы, что может инвалидировать указатели на все остальные элементы
Выше выяснили, что новых элементов не создается
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Но так можно про любой контейнер сказать, хоть вектор, хоть лист
источник

IZ

Ilia Zviagin in pro.cxx
Artöm Bakri Al-Sarmini
std::map::operator[] безопасно вызывать для разных уже существующих элементов из разных потоков
Но как ты будешь уверен, что не создаёшь новый элемент, если ты вызываешь [] ?
источник

R

Ruben in pro.cxx
У std::list еще и итераторы не инвалидируются при вставке/удалении элементов, за исключением того, на который указывает итератор
источник

R

Ruben in pro.cxx
Ilia Zviagin
Но как ты будешь уверен, что не создаёшь новый элемент, если ты вызываешь [] ?
Сначала выполнить find
источник

AK

Andrei K in pro.cxx
Pavel
Нет, оператор[] может создавать новые элементы, что может инвалидировать указатели на все остальные элементы
Не все остальные, а только соседние с ним.
источник

AK

Andrei K in pro.cxx
И то, если не существовал раньше.
источник

IZ

Ilia Zviagin in pro.cxx
Ruben
Сначала выполнить find
Если ты уже find выполнил, то ты получил итератор, и он уже указывает на элемент.
Зачем тебе [] ?
источник

AK

Andrei K in pro.cxx
Но в целом да, не надо пользоваться std::map в многопоточке.
источник

R

Ruben in pro.cxx
Ilia Zviagin
Если ты уже find выполнил, то ты получил итератор, и он уже указывает на элемент.
Зачем тебе [] ?
Да
источник

AK

Andrei K in pro.cxx
Ilia Zviagin
Если ты уже find выполнил, то ты получил итератор, и он уже указывает на элемент.
Зачем тебе [] ?
Кстати да, хорошее замечание.
источник