От Юрий Ответить на сообщение
К All
Дата 21.03.2001 02:13:00 Найти в дереве
Рубрики Прочее; Версия для печати

646. Ростиславу о deadlock'ах

Ростислав,

Прежде всего я приношу извинения за задержку. Почему-то на
несколько дней я потерял доступ к форму. (Может, Модератор
сможет прокомментировать это?)

Из всех соображений на тему deadlock'ов в данный момент могу вспомнить
только главу в теоретической книге Хоара (Hoare) "Теория
последовательных взаимодействующих процессов" (Изд-во "Мир",
середина 80-х), где разбирается классическая задача параллельного
программирования - "Задача о 5-и обедающих философах". На круглом
столе стоит 5 тарелок со спагетти и между ними разложено 5 вилок.
Предполагается, что есть спагетти можно, только имея в каждой руке
по вилке. 5 философов прохаживается по комнате, время от времени
подходят к своей тарелке на столе и дожидаются, пока освободятся обе
вилки рядом с их тарелкой (возможно, занятые соседями), после
чего, съев некоторое (ненулевое) количество спагетти, отходят
от стола и возобновляют беседу до тех пор, пока не проголодаются.
А теперь представьте себе, что все философы одновременно подошли
к столу, взяли в левую руку по вилке и ждут, пока сосед справа
освободит свою вилку. Как легко догадаться, в этих условиях
они все умрут от голода.

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

Ростислав, я поискал в Интернете и нашел ссылочку, которая тоже
может отчасти заинтересовать Вас:

msdn.microsoft.com/library/techart/msdn_deadlock.htm

"Detecting Deadlocks in Multithreaded Win32 Applications"

И вот пара выдержек с этой странички:

"A deadlock, very simply, is a condition in which two or more
threads wait for each other to release a shared resource before
resuming their execution. Because all threads participating in a
deadlock are suspended and cannot, therefore, release the
resources they own, no thread can continue, and the entire
application (or, worse, more than one application if the resources
are shared between threads in multiple applications) appears to
hang."

........

"Unfortunately, deadlocks are not always that easy to see. In a
complex application, several conditions depending on each other
may account for a deadlock that only shows up under very specific
circumstances. Here is a piece of trivia from 16-bit Microsoftr
WindowsЩ history that describes such a pathological deadlock,
involving both low-level system details and third-party
applications: With certain network drivers loaded, Windows version
3.1 occasionally enters a state in which trying to open a virtual
DOS box produces an empty black screen that you can switch away
from but which never goes beyond the stage of pure and dull
blackness_the so-called "black screen of death." This orphaned DOS
box could linger around until doomsday, and there's no way to get
rid of it or bring it back to life_and even worse, in some of the
impersonations of the "black screen of death," the entire system
simply hangs until a cold reboot is performed."