S>Непонятно. Вы описали поведение только одного потока. Что должен наблюдать второй поток? Предположим, потоком I захвачена блокировка A. S>Поток II пытается захватить блокировку B — что получает? Встаёт в ожидании; получает fail; успешно захватывает? S>Если встаёт в ожидании, то вам не нужно иметь две блокировки, достаточно одной A+B. Если успешно захватывает, то в вашем коде — баг: как только поток I попробует захватить блокировку B, он встанет в ожидании.
fail. В моем коде все потоки сначала захватывают блокировку А потом B.
S>Если поток II попробует вместо освобождения B захватить A, то вы поймаете deadlock.
не понял, почему поймаю deadlock? Если исходить из того, что S>Предположим, потоком I захвачена блокировка A.
То если поток II пробует захватить A, то он встаёт в ожидание.
Может я неправильно понял смысл "вместо освобождения B". Если их убрать смысл не поменяется. Что значит "вместо"?
Отвечайте на это сообщение, только если у Вас хорошее настроение и в Вашем ответе планируются только конструктивные вопросы и замечания http://rsdn.ru/Info/rules.xml