История изменений
Исправление MOPKOBKA, (текущая версия) :
Опять не то
Все то.
у тебя весь цикл легко трассируется.
Не в этом причина, они могут иметь сложные переходы, но главное что бы весь процесс был виден компилятору на момент создания main_thread_job.
Если спрятать одну из функций цикла то проверка флага на месте оказывается.
Не спрятать, а вынести туда где компилятор не может сделать проверку на изменение flag. Ты убираешь UB этим, если мыслить в рамках одного потка.
// не UB
set_flag_p(&flag);
while (flag) {
switch_flag(void);
...
}
Неужели ты не допускаешь возможности ситуации, когда весь код одного треда содержится в одном .c файле? Например эта функция может выделять выходной буфер для шифрованного текста, брать входные данные и шифровать. Такой код не будет сильно разбит, и вполне может быть в одном .c файле.
Исправление MOPKOBKA, :
Опять не то
Все то.
у тебя весь цикл легко трассируется.
Не в этом причина, они могут иметь сложные переходы, но главное что бы весь процесс был виден компилятору на момент создания main_thread_job.
Если спрятать одну из функций цикла то проверка флага на месте оказывается.
Не спрятать, а вынести туда где компилятор не может сделать проверку на изменение flag. Ты убираешь UB этим, если мыслить в рамках одного потка.
Неужели ты не допускаешь возможности ситуации, когда весь код одного треда содержится в одном .c файле? Например эта функция может выделять выходной буфер для шифрованного текста, брать входные данные и шифровать. Такой код не будет сильно разбит, и вполне может быть в одном .c файле.
Исправление MOPKOBKA, :
Опять не то
Все то.
у тебя весь цикл легко трассируется.
Не в этом причина, они могут иметь сложные переходы, но главное что бы весь процесс был виден компилятору на момент создания main_thread_job.
Если спрятать одну из функций цикла то проверка флага на месте оказывается.
Не спрятать, а вынести туда где компилятор не может сделать проверку на изменение flag. Ты убираешь UB этим, если мыслить в рамках одного потка.
Неужели ты не допускаешь возможности ситуации, когда весь код одного треда содержится в одном .c файле?
Исправление MOPKOBKA, :
Опять не то
Все то.
у тебя весь цикл легко трассируется.
Не в этом причина, они могут иметь сложные переходы, но главное что бы весь процесс был виден компилятору на момент создания main_thread_job.
Если спрятать одну из функций цикла то проверка флага на месте оказывается.
Не спрятать, а вынести туда где компилятор не может сделать проверку на изменение flag. Ты убираешь UB этим.
Неужели ты не допускаешь возможности ситуации, когда весь код одного треда содержится в одном .c файле?
Исправление MOPKOBKA, :
Опять не то
Все то.
у тебя весь цикл легко трассируется.
Не в этом причина, они могут иметь сложные переходы, но главное что бы весь процесс был виден компилятору на момент создания main_thread_job.
Если спрятать одну из функций цикла то проверка флага на месте оказывается.
Не спрятать, а вынести туда где компилятор не может сделать проверку на изменение flag.
Неужели ты не допускаешь возможности ситуации, когда весь код одного треда содержится в одном .c файле?
Исправление MOPKOBKA, :
Опять не то
Все то.
у тебя весь цикл легко трассируется.
Не в этом причина, они могут иметь сложные переходы, но главное что бы весь процесс был виден компилятору на момент создания main_thread_job.
Если спрятать одну из функций цикла то проверка флага на месте оказывается.
Не спрятать, а вынести туда где компилятор не может сделать проверку на изменение flag.
Неужели ты не допускаешь возможности ситуации, когда весь код цикла содержится в одном .c файле?
Исходная версия MOPKOBKA, :
Опять не то
Все то.
у тебя весь цикл легко трассируется.
Не в этом причина, они могут иметь сложные переходы, но главное что бы весь процесс был виден компилятору на момент создания main_thread_job.
Если спрятать одну из функций цикла то проверка флага на месте оказывается.
Не спрятать, а вынести туда где компилятор не может сделать проверку на изменение flag.