LINUX.ORG.RU

Как можно обеспечить гарантию атомарности new?

 


0

1

Допустим во время вызова конструктора нить переключается и объект остается в неопределенном состоянии, а его пытаются уже где-то использовать что наверное и приводит к падению программы, но очень-очень редко.



Последнее исправление: cetjs2 (всего исправлений: 1)
Ответ на: комментарий от KivApple

Но эта проблема никак не связана с new.

Да, именно. Заданный вопрос просто не соответствовал решаемой задачи, как выяснилось. Вопрос был по сути не в new, а в архитектуре приложения - как обеспечить корректную инициализацию объекта в многопоточном окружении. У человека вообще была идея повысить приоритет потока, в котором выполняется new, над другими потоками, чтобы гарантировать, что этот поток быстрее выполнится чем другие потоки и тем самым гарантировать, что остальные потоки увидят объект по указателю уже проинициализированным. Вот такая вот рокет сайенс.

yetanother ★★
()
Ответ на: комментарий от anonymous

Если следовать стандарту, то нельзя отдавать this даже в конце, и даже без наследования.

Можно узнать откуда в стандарте это следует?

До выхода из конструктора объект не создан.

Ты хотел сказать его lifetime не начался? Объект создаётся ещё до входа в конструктор.

anonymous
()
Ответ на: комментарий от Lzzz

Как бы дать нити конструктора максимальный приоритет, чтобы ее не смогли вытеснить до окончания работы

Не создавать нить внутри конструктора. Тогда результат из new не вернётся до его окончания.

monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.