caf, в вашем примере кода Process B изменяет condition
без блокировки мьютекса в первую очередь. Если Process B просто заблокировал мьютекс во время этой модификации, а затем все еще разблокировал мьютекс перед вызовом pthread_cond_signal
, не было бы проблем --- я прав об этом?
Я считаю, что интуитивно, что position верно: вызов pthread_cond_signal
без владения блокировкой мьютекса - это плохая идея. Но пример в кафе на самом деле не является доказательством в поддержку этой позиции; это просто доказательство в пользу гораздо более слабой (практически очевидной) позиции, что Bad Idea модифицирует разделяемое состояние, защищенное мьютексом, если вы не заблокировали этот мьютекс в первую очередь.
Может ли кто-нибудь предоставить образец код, в котором вызов pthread_cond_signal
, за которым следует pthread_mutex_unlock
, дает правильное поведение, но вызов pthread_mutex_unlock
, а затем pthread_cond_signal
дает неправильное поведение?