Size: a a a

2020 December 06

ИП

Илья Павелко... in pro.cxx
Всем
источник

A

Alexey in pro.cxx
Всем привет. вот и у меня появился вопрос для сообщества
Есть такой цикл:
auto &ref = <some vector>
for (size_t pos = 0; pos < ref.size(); pos++) {
 . . .
 wait(); //тут текущий поток находится в ожидании, при этом в вектор ref могут добавиться элементы
}
Тут ведь нельзя быть уверенным, что в условии цикла ref.size() не будет закеширован оптимизатором и добавленные элементы в цикле обработаются?
источник

D

Danya in pro.cxx
источник

AT

Alexander Tulikov in pro.cxx
Alexey
Всем привет. вот и у меня появился вопрос для сообщества
Есть такой цикл:
auto &ref = <some vector>
for (size_t pos = 0; pos < ref.size(); pos++) {
 . . .
 wait(); //тут текущий поток находится в ожидании, при этом в вектор ref могут добавиться элементы
}
Тут ведь нельзя быть уверенным, что в условии цикла ref.size() не будет закеширован оптимизатором и добавленные элементы в цикле обработаются?
Нельзя.
источник

A

Alexey in pro.cxx
А как лучше разрулить ситуацию?
источник

IL

Ignat Loskutov in pro.cxx
Вообще, кажется, ответ зависит от реализации функции wait()
источник

RP

Roman Proskuryakov in pro.cxx
Alexey
А как лучше разрулить ситуацию?
Использовать раст (простите)
источник

D

Danya in pro.cxx
Alexey
А как лучше разрулить ситуацию?
volatile vector
источник

AT

Alexander Tulikov in pro.cxx
Alexey
А как лучше разрулить ситуацию?
Использовать синхронизацию для разделяемых данных.
источник

N

Neargye in pro.cxx
Roman Proskuryakov
Использовать раст (простите)
/warn
источник

N

Neargye in pro.cxx
Danya
volatile vector
Вроде можно обернуть в volatile_read, но я не помню с какого стандарта
источник

SS

Sergey Skvortsov in pro.cxx
Ignat Loskutov
Вообще, кажется, ответ зависит от реализации функции wait()
Достаточно же того, что ее тело не видно компилятору
источник

A

Alexey in pro.cxx
Ignat Loskutov
Вообще, кажется, ответ зависит от реализации функции wait()
вот это вряд-ли. Какая разница как именно ждёт. Если что, то это действительно wait от condition_variable
источник

RP

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

RP

Roman Proskuryakov in pro.cxx
ну и молить богов, что внутри wait тоже соблюдают правила обращения к вектору через примитивы синхронизации
источник

D

Danya in pro.cxx
Neargye
Вроде можно обернуть в volatile_read, но я не помню с какого стандарта
Чёт не гуглится
источник

ИП

Илья Павелко... in pro.cxx
Можете помочь , мне нужно написать игру "угадай слово" чтобы слова хранились в матрице
источник

D

Danya in pro.cxx
Илья Павелко
Можете помочь , мне нужно написать игру "угадай слово" чтобы слова хранились в матрице
Ну напиши...
источник

ИП

Илья Павелко... in pro.cxx
Danya
Ну напиши...
Прикольно помогаете
источник

D

Danya in pro.cxx
Илья Павелко
Прикольно помогаете
Тебе никто не обязан помогать
источник