Исправление firkax, (текущая версия) :
Не в этом причина, они могут иметь сложные переходы, но главное что бы весь процесс был виден компилятору на момент создания main_thread_job.
Виден компилятору = легко трассируется. С чем ты споришь? И да, это условие (невозможность легко трассировать) указано в старте темы.
Не спрятать, а вынести туда где компилятор не может сделать проверку на изменение flag.
Вынести туда где компилятор не видит = спрятать. Опять непонятно с чем спор.
Неужели ты не допускаешь возможности ситуации, когда весь код одного треда содержится в одном .c файле?
Допускаю, конечно, но тема про другой случай. С «тредом в одном файле» мне и так всё ясно, я про него не спрашивал.
Ты убираешь UB этим, если мыслить в рамках одного потка.
А вот это и есть суть вопроса, но мне интересно теоретическое обоснование с позиции строгих UB-проверок. То, что компилятор в итоге генерирует хороший код, и так понятно.
Исходная версия firkax, :
Не в этом причина, они могут иметь сложные переходы, но главное что бы весь процесс был виден компилятору на момент создания main_thread_job.
Виден компилятору = легко трассируется. С чем ты споришь? И да, это условие (невозможность легко трассировать) указано в старте темы.
Не спрятать, а вынести туда где компилятор не может сделать проверку на изменение flag.
Вынести туда где компилятор не видит = спрятать. Опять непонятно с чем спор.
Неужели ты не допускаешь возможности ситуации, когда весь код одного треда содержится в одном .c файле?
Допускаю, конечно, но тема про другой случай. С «тредом в одном файле» мне и так всё ясно, я про него не спрашивал.