Порядок создания объектов
От: _NN_ www.nemerleweb.com
Дата: 29.05.23 21:23
Оценка:
Всплыл такой вопрос, положим у нас есть код вида:

Tool tool{};

std::thread toolRunner([]() {
    printf("Starting tool");
});


Есть ли у нас гарантии от компилятора и от процессора, что toolRunner будет создан после того как будет создан tool ?

Насколько я понимаю, компилятор вправе переупорядочить создание если нет видимого эффекта.
В данном случае нет разницы что будет создано первым, а значит можно поменять местами в целях оптимизации.
Исходя из этого напрашивается вывод, каждое создание std::thread должно быть ограничено барьером, чтобы запретить переупорядочивание как компилятором так и процессором и получить нужный нам порядок.

Какие мысли ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.