2014-12-19 1 views
-2

Предположим, у меня есть система с N процессами. Каждый процесс требует максимальных ресурсов K (K < < N). Для предотвращения конфликтов процесс должен блокировать каждый ресурс перед его доступом. Возможна ли взаимоблокировка, и если да, то каков максимальный N, для которого система по-прежнему безголовая?Тупик для системы с N потоками

ответ

3

Максимальное значение N равно 1. При использовании двух или более потоков, взаимодействующих в одном и том же процессе с одной и той же памятью, взаимоблокировка вполне возможна. Сценарий:

A asks for and receives lock 1 
B asks for and receives lock 2 
A asks for lock 2 and pauses 
B asks for lock 1 and pauses 
A and B now deadlock 

Порядок блокировки должны быть согласованы в течение> 1 замков для того, чтобы полностью предотвратить тупики.

0

«Для предотвращения столкновений процесс должен блокировать каждый ресурс перед его доступом» - это вводит в заблуждение/неверно. Он должен заблокировать КАЖДЫЙ ресурс, который ему нужен, в одной операции блокировки или оставаться заблокированным до тех пор, пока весь комплект не станет доступен. Вполне возможно, что потоки будут представлять требование к ресурсам, установленное для структуры/экземпляра управления ресурсами, и оставаться заблокированными до тех пор, пока ВСЕ ресурсы в наборе не станут доступны, не предотвращая доступ к любому из них во время ожидания.

Применение блокировки для каждого ресурса и создание потоков для последовательной блокировки ресурсов - это наивное решение, которое, скорее всего, не сработает для любого N> 1, как объясняет Хейни.

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