2009-12-17 3 views
1

Замыкание обычно означает, что нить (или процесс) A ожидает нить B, и в то же время нить B ждет нить A.Ожидает события, которые никогда не вызовут тупик?

В настоящее время я столкнулся с аналогичной ситуацией в нашем приложении. Thread A ожидает, что событие будет установлено потоком B. Однако поток B равен , а не ждет потока A, он просто не установит событие (независимо от причины). Мне интересно, можно ли назвать эту ситуацию «тупиком», или есть ли другой термин для этого?

+0

да: безнадежно! – kajaco

ответ

5

Я бы назвал это ошибкой или плохим дизайном. Но это не тупик, если один поток все еще работает.

1

Да, я бы назвал это тупиком.

Однако от этого зависит только один поток (Thread A), а не все приложение.

+3

Я бы сказал, что А остановлен, а не зашел в тупик. Но это действительно семантический привес. –

+0

Что сказал Нейл. Я бы сказал, что тупик - это когда два (или более) процесса ждут ** друг друга ** для завершения, прежде чем они смогут продолжить. Блокировка (т. Е. 'Thread.Sleep (-1)') неограниченно не является взаимоблокировкой. –

+0

Спасибо. Кажется, я неправильно понял определение. – Matthias

0

Вот моя точка зрения:

Тупиковая ситуация, когда глобальное состояние программы не прогрессирует больше. Если A заблокирован, но программа все равно может завершиться, так как B может найти решение, это не является взаимоблокировкой.

+2

* Тупик - это ситуация, когда глобальное состояние программы больше не продвигается. *: Это определение также будет соответствовать случаю «livelock». – jldupont

+0

Ну гул ... да. Я просто пытался ответить на вопрос, часть, которую вы упомянули, является обязательным условием, чтобы быть тупиком. И это не * выполняется в вопросе bytepusher. Это не означает, что все, что заполняет это условие, является тупиком. Так же, как у автомобиля обычно есть 4 колеса, но все автомобили с 4 колесами не обязательно являются машинами ... (Хорошо, я понимаю вашу точку зрения, мне пришлось что-то ответить) – Ben

4

Строго говоря, нет, это не тупик, о чем вы говорили сначала (за исключением того, что в общем случае может существовать целый цикл потоков, каждый из которых ожидает следующую блокировку: A-> B -> ...-> Z-> A).

Я думаю, вы могли бы назвать это resource starvation, но это довольно общий термин, который также охватывает тупик.