Ну я предполагал, что в программе всего 3 потока. То есть, когда поток А вызывает lock, то он первый и единственный, кто претендует на вход в критический участок, почему он тогда вообще должен ждать? К тому же ранее в книге обсуждались first-come-first-served, то есть по идее опять таки раньше кто пришел раньше, того и тапки.
Хотя для этой конкретной очереди свойство first-come-first-served не указано, хм. Тогда схема вообще по сути не понятно зачем нарисована.
В любом случае, спасибо)
Про тапки - такое работает, если замок свободный