170 похожих чатов

Привет, подскажите, опреация поиска в мапе, потокобезопасна или нет?

45 ответов

9 просмотров

Да

akuma- Автор вопроса

Некорректный вопрос

Kirill Bolshakov
Да

Эм, если в другом треде стриггерттся ребалансировка, find вернёт корректное значение?

akuma- Автор вопроса
Kirill Bolshakov
Ребалансировка при поиске?

Нет, если делаешь вставку в другом треде или очищение, а первый тред вызывает файнд.

akuma
Почему это?

Потому что зависит от того как используется мапа

vladislav
Нет, если делаешь вставку в другом треде или очище...

Про вставку или очищение я разговор не вёл. Речь шла о поиске

akuma
Почему это?

Потому что вопрос не имеет смысла без контекста. Что при этом происходит в других потоках? Безопасна относительно чего?

akuma- Автор вопроса
Kirill Bolshakov
Про вставку или очищение я разговор не вёл. Речь ш...

все верно, это был конкретный вопрос, мапа не изменяется

Что ты понимаешь под "потокобезопасно" ?

akuma- Автор вопроса
Ilya Zviagin
Что ты понимаешь под "потокобезопасно" ?

ну там вроде одно понятие - при выполнении данной операции одновременно в нескольких потоках, я не получу UB.

akuma
ну там вроде одно понятие - при выполнении данной...

Но это называется по-другому, "СИНХРОНИЗИРОВАН".

akuma- Автор вопроса
Ilya Zviagin
Но это называется по-другому, "СИНХРОНИЗИРОВАН".

так говорят в общем, типа методы синхронизации потоков, а я говорил про операцию, и говорят, что операцаия безопасна гугл говорит тоже самое и как другие: http://web.mit.edu/6.031/www/fa17/classes/20-thread-safety/

akuma
так говорят в общем, типа методы синхронизации пот...

“without additional coordination” means that the data type can’t put preconditions on its caller related to timing, like “you can’t call get() while set() is in progress.”

akuma- Автор вопроса
Alexander Tulikov
“without additional coordination” means that the d...

Так суть одна, что вы мне пытаетесь доказать?

akuma- Автор вопроса
Alexander Tulikov
“without additional coordination” means that the d...

Текст стандарта "The library defines a number of atomic operations (Clause 29) and operations on mutexes (Clause 30) that are specially identified as synchronization operations."

akuma
Так суть одна, что вы мне пытаетесь доказать?

Суть в том, что thread-safe операция не может накладывать дополнительные ограничения на вызывающую сторону, типа не писать пока я читаю. Отсюда, очевидно, чтение из мутабельного контейнера не является thread-safe операцией.

akuma- Автор вопроса
Alexander Tulikov
Суть в том, что thread-safe операция не может накл...

Это очевидно. НО БЫЛО СКАЗАННО, что он НЕ ИЗМЕНЯЕТСЯ.

akuma
Это очевидно. НО БЫЛО СКАЗАННО, что он НЕ ИЗМЕНЯЕТ...

Сейчас не изменяется, потом начнёт изменяться, по твоему свойство операции тоже динамически меняться будет?

akuma
так говорят в общем, типа методы синхронизации пот...

Операция thread-safe - это значит, что при попеременном доступе к контейнеру из разных потоков все операции будут работать ОК, То есть, все операции - реэнтерантные. Но это НЕ значит, что контейнер не нужно защищать от ОДНОВРЕМЕННОГО доступа. Нужно, как и любые другие данные.

akuma
так говорят в общем, типа методы синхронизации пот...

А как эта писанина относится к С++ вообще?

akuma- Автор вопроса
Alexander Tulikov
Сейчас не изменяется, потом начнёт изменяться, по ...

Этого не подразумевет логика и архитектра программы!

akuma
Этого не подразумевет логика и архитектра программ...

вот тут точно требуется разделение понятий "реентрабельной" и "потокобезопасной" операции

Alexander Tulikov
Сейчас не изменяется, потом начнёт изменяться, по ...

Thread safety: All const member functions can be called concurrently by different threads on the same container. cppreference считает иначе

akuma- Автор вопроса
Kirill Bolshakov
Thread safety: All const member functions can be c...

это конечно какой-то кек-спор рили

Kirill Bolshakov
Thread safety: All const member functions can be c...

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

Alexander Tulikov
Это говорит, что они только с собой могут параллел...

Это значит, что потокобезопасно юзать const функции над контейнерами (это свойство контейнеров как раз). Нарушение потокобезопасности будет при использовании не-const функции. То есть свойство не меняется динамически как ты сказал, оно остаётся.

akuma
Этого не подразумевет логика и архитектра программ...

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

akuma
это конечно какой-то кек-спор рили

Давай перейдём из философо-терминологической плоскости в сугубо практическую. Привет, подскажите, опреация поиска в мапе, потокобезопасна или нет? Поиск в одном и том же словаре МОЖНО производить из разных потоков управления. При этом НУЖНО ГАРАНТИРОВАТЬ, чтобы во время поиска никто словарь не менял.

akuma- Автор вопроса
Ilya Zviagin
Давай перейдём из философо-терминологической плоск...

Да, это я прекрасно понятно. ПОЭТОМУ И НАПИСАННА КОНКРЕТНАЯ ОПЕРАЦИЯ!

akuma
Да, это я прекрасно понятно. ПОЭТОМУ И НАПИСАННА К...

Ну, так что ещё не ясно? Или может ещё кому-то не ясно?

akuma- Автор вопроса
Kirill Bolshakov
Это значит, что потокобезопасно юзать const функци...

Это значит, что в общем случае эти const функции не являются потокобезопасными.

Ilya Zviagin
Являются.

Ну смотри, ты с определением потокобезопасности операции выше в http://web.mit.edu/6.031/www/fa17/classes/20-thread-safety/ согласен?

Alexander Tulikov
Ну смотри, ты с определением потокобезопасности оп...

Нет. Даже читать не хочу. Оно как к С++ относится?

akuma- Автор вопроса
Ilya Zviagin
Нет. Даже читать не хочу. Оно как к С++ относится?

Это было вообще к теме то как именовать операцию синхронизированной или безопасной

Ilya Zviagin
Нет. Даже читать не хочу. Оно как к С++ относится?

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

Alexander Tulikov
Ну в стандарте С++ же нет определения потокобезопа...

с C++11 должно быть все-таки, не такими словами, но должно

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта