LINUX.ORG.RU

История изменений

Исправление 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.