2012-05-13 2 views
3

Может ли условие, когда один процесс/поток заблокирован, пытаясь получить тот же мьютекс, называется «тупиком»?тупик в одном процессе -?

mutex_lock (& мьютекс) - успех
...
mutex_lock (& мьютекс) - заблокирован, мьютекс не выпустили

Кажется, как состояние "nonshearable ресурса" не применяется: здесь только одного process/thread, так что ни один случай непереходного ресурса удерживать и ждать: вот только один процесс, чтобы не ждать, пока другой процесс освободит запрошенный ресурс

+1

С помощью [рекурсивного мьютекса] (http://stackoverflow.com/q/187761/60761) проблема не возникнет. Без него это просто ошибка в алгоритме. –

+0

Абсолютно ... Я просто задаюсь вопросом о кажущихся формальных несоответствиях с «необработанными условиями тупика» Коллемана: 2. Удержание и ожидание или холдинг ресурсов. В настоящее время процесс содержит хотя бы один ресурс и запрашивает дополнительные ресурсы, которые хранятся другими процессами - никаких других процессов в этом случае – user270398

+0

Ваша нить запрашивает ресурс, который уже поддерживается потоком. То, что это одна и та же нить, не имеет значения, просто странно. –

ответ

2

Да, это считается или потенциально может привести к тупиковой ситуации.

термин не связан нитями или процессами - но просит.

предположит, что ваш замок (mutex) является не возвратными, и предположит, что ваш ресурс заблокирован, когда мутировал, и что это ошибка мутировать ресурс из нескольких источников. что происходит, когда/если ваш однопоточный процесс пытается инициировать новую мутацию данных в мутации и блокировку без повторного входа, которая заблокирована, запрашивается блокировать? тупик

«потенциально», поскольку вы не указали точно, с каким видом мьютекса вы имеете дело.

1

Нет, это не тупик.

Тупик может возникнуть, если одновременно выполняются четыре условия.

  • Взаимное исключение: Ресурсы, участвующие должны быть неразделяемые; в противном случае процессы не будут препятствовать использованию ресурса, когда это необходимо. Только один процесс может использовать ресурс в любой момент времени.
  • Удержание и ожидание или ресурс: процесс в настоящее время удерживает хотя бы один ресурс и запрашивает дополнительные ресурсы, которые хранятся другими процессами.
  • Отсутствие предоплаты: ресурс может быть освобожден только добровольно путем его проведения.
  • Circular wait: каждый процесс должен ждать ресурса, который удерживается другим процессом, который, в свою очередь, ждет, пока первый процесс освободит ресурс. В общем, существует множество ожидающих процессов, P = {P1, P2, ..., PN}, так что P1 ждет ресурса, удерживаемого P2, P2 ждет ресурса, удерживаемого P3, и так далее, пока PN не будет ожидая ресурса, удерживаемого P1.

more...

С одного процесса, то Круговая Wait условие не может быть выполнено, таким образом тупик никогда не может возникнуть с одного процесса.

Смежные вопросы