• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Deadlock

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

nexus

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

Guest

Полагаю, с концепцией потоков ты знаком? Тогда примерно так (псевдо код)
Код:
// 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 ждет освобождения В, а он не освободится, пока не будет свободен объект А. И оба потока стоят в точке обозначенной (**)
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!