Deadlock

Тема в разделе "MS Visual C++", создана пользователем nexus, 30 май 2005.

Статус темы:
Закрыта.
  1. nexus

    nexus Гость

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

    Guest Гость

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

Поделиться этой страницей