История изменений
      
        Исправление
      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.