да, сначала вы должны использовать мьютекс для защиты операций чтения и записи в interruptRequested
в соответствующих блоках.
, даже если работает , как ожидается, на самом деле это может быть не так. 99% успеха не принимаются в программном обеспечении. Кроме того, ваша тестовая программа тривиальна - велика вероятность, что она (молча или таинственно) потерпит неудачу в реальном мире.
использование volatile (или атомики, во многих случаях) в качестве замены для блокировки - это плохая идея. эта модель в конечном итоге выйдет из строя, хотя часто кажется для правильной работы при небольших нагрузках. Есть несколько угловых случаев, но вы должны отказаться от ассоциаций volatile, являющихся заменой правильной конструкции, в которой используется блокировка. на самом деле вы можете проверить это, сделав interruptRequested
an int
и используя только увеличение / уменьшение. под большими нагрузками - вы можете быстро превысить [0 ... 1].
вы будете часто использовать volatile и / или atomics при объявлении / чтении / записи interruptRequested (опять же, я рекомендую проверки int / inc / dec / bounds, особенно во время обучения). если чтение и запись заблокированы (что и должно быть в данном случае), использование атомарных операций чтения / записи не поможет.
относительно вашей программы, условия (pthread_cond_t
) могут быть хорошим выбором.