Deadlock

  • Автор темы nexus
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

nexus

#1
Кто нибудь может внятно обьяснить и показать пример на C что такое deadlock??
 
G

Guest

#2
Полагаю, с концепцией потоков ты знаком? Тогда примерно так (псевдо код)
Код:
// 2 объекта А, В, с эксклюзивным доступом
Mutex mtxA;
int nA=0;

Mutex mtxB;
int nB=0;

int threadA(...)
{
....
LockMutex(mtxA);
nA++;
 ...
 LockMutex(mtxB);       (**)
 nB += nA;
UnlockMutex(mtxB);
 UnlockMutex(mtxA);
...
}

int threadB(...)
{
LockMutex(mtxB);
 // use nB;
 ..
LockMutex(mtxA);       (**)
 // use nB and nA
UnlockMutex(mtxА);
 UnlockMutex(mtxB);
}
А смысл такой: 2 потока пользуются несколькими ресурсами в несовпадающем порядке. Если при этом требуется эксклюзивный доступ к этим ресурсам, то возможна ситуация, когда поток 1 блокирует объект А, и ждет доступа к объекту В. Объект В, в свою очередь, заблокирован потоком 2. Теперь ни один поток не может работать дальше, так как поток 1 ждет освобождения В, а он не освободится, пока не будет свободен объект А. И оба потока стоят в точке обозначенной (**)
 
Статус
Закрыто для дальнейших ответов.