Re[2]: Двойная блокировка переключатель
От: igor-booch Россия  
Дата: 20.09.15 13:06
Оценка:
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
Отредактировано 20.09.2015 13:08 igor-booch . Предыдущая версия . Еще …
Отредактировано 20.09.2015 13:07 igor-booch . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.