Size: a a a

2020 December 06

ИП

Илья Павелко... in pro.cxx
А , ну ок
источник

D

Danya in pro.cxx
Если ты даже правила не можешь прочитать
источник

N

Neargye in pro.cxx
Danya
Чёт не гуглится
P1382, походу так и не добавили :(
источник

RP

Roman Proskuryakov in pro.cxx
Neargye
Вроде можно обернуть в volatile_read, но я не помню с какого стандарта
что не сделает код потокобезопасным. об этом говорили уже миллион раз
источник

AM

Alexander Malkov in pro.cxx
Roman Proskuryakov
Использовать раст (простите)
а разве раст не оптимизирует тут так же?
источник

RP

Roman Proskuryakov in pro.cxx
Alexander Malkov
а разве раст не оптимизирует тут так же?
Он просто не даст использовать структуру из другого потока без примитивов синхронизации (без него будет ошибка компиляции).
источник

N

Neargye in pro.cxx
Roman Proskuryakov
что не сделает код потокобезопасным. об этом говорили уже миллион раз
А кто говорит про потокобезопасность, только про убирание оптимизации :)
источник

RP

Roman Proskuryakov in pro.cxx
Neargye
А кто говорит про потокобезопасность, только про убирание оптимизации :)
вот это подстава, конечно.
источник

N

Neargye in pro.cxx
Roman Proskuryakov
вот это подстава, конечно.
Нет, это ответ, вопрос был про оптимизации. Вдруг так всего 1 одно ядро и вечно свитчается контектст исполнения
источник

VS

Vlad Serebrennikov in pro.cxx
Neargye
А кто говорит про потокобезопасность, только про убирание оптимизации :)
оптимизации возможны лишь в отсутствие гарантированного наблюдаемого поведения. нужно устранить причину, а не бороться с последствиями
источник

N

Neargye in pro.cxx
Vlad Serebrennikov
оптимизации возможны лишь в отсутствие гарантированного наблюдаемого поведения. нужно устранить причину, а не бороться с последствиями
Это уже оффтоп
источник

A

Andrew in pro.cxx
Alexey
вот это вряд-ли. Какая разница как именно ждёт. Если что, то это действительно wait от condition_variable
Если добавление элементов в вектор проводится под мьютексом, связанным с этим cv, то все же будет синхронизировано, правильно?
источник

A

Alexey in pro.cxx
оно нормально синхронизировано. но я опасаюсь, что возможна оптимизация и size() будет вычислен только один раз
источник

A

Alexey in pro.cxx
а нужно обработать и добавленные во время ожидания элементы
источник

RP

Roman Proskuryakov in pro.cxx
да, поэтому и надо size() получать за мьютексом.
источник

d

disba1ancer in pro.cxx
Alexey
вот это вряд-ли. Какая разница как именно ждёт. Если что, то это действительно wait от condition_variable
Думаю тут прокатит, вроде как wait расставляют барьеры памяти, но это надо уточнять
источник

RP

Roman Proskuryakov in pro.cxx
Alexey
Всем привет. вот и у меня появился вопрос для сообщества
Есть такой цикл:
auto &ref = <some vector>
for (size_t pos = 0; pos < ref.size(); pos++) {
 . . .
 wait(); //тут текущий поток находится в ожидании, при этом в вектор ref могут добавиться элементы
}
Тут ведь нельзя быть уверенным, что в условии цикла ref.size() не будет закеширован оптимизатором и добавленные элементы в цикле обработаются?
Почитай https://vorbrodt.blog/2019/02/21/memory-barriers-and-thread-synchronization/ , только там в последнем примере УБ. Но идея должна быть ясна
источник

A

Alexey in pro.cxx
ок, спасибо, посмотрю
источник

d

disba1ancer in pro.cxx
Roman Proskuryakov
Он просто не даст использовать структуру из другого потока без примитивов синхронизации (без него будет ошибка компиляции).
Не даст даже если по логике у меня потоки одновременно не лезут в одну память, а явной синхронизации нет?
источник

RP

Roman Proskuryakov in pro.cxx
disba1ancer
Не даст даже если по логике у меня потоки одновременно не лезут в одну память, а явной синхронизации нет?
даст, если использовать scoped threads
источник