Parallel.ForEach () и foreach (IEnumerable < T > .AsParallel ())

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 дает неправильное поведение?

140
задан SnickersAreMyFave 1 August 2013 в 18:25
поделиться