Sobes.tech
Middle+

Можете ли да наведете пример ситуације у којој долази до међусобног блокирања процеса, што их натера да заувек остану заглављени?

sobes.tech АИ

Одговор од АИ

Vzajamna blokada (deadlock) nastaje kada dva ili više procesa (ili niti) istovremeno drže resurse i svaki od njih čeka da drugi oslobodi resurs. Kao rezultat, nijedan od njih ne može da nastavi.

Primer:

  • Proces A dobija resurs R1.
  • Proces B dobija resurs R2.
  • Proces A pokušava da dobije resurs R2 i blokira se, čekajući njegovo oslobađanje.
  • Proces B pokušava da dobije resurs R1 i takođe se blokira.

Oba procesa čekaju jedno na drugo, što dovodi do beskonačne blokade.

Primer u C++ sa mutexima:

#include <mutex>
#include <thread>
#include <iostream>

std::mutex mtx1, mtx2;

void thread1() {
    std::lock_guard<std::mutex> lock1(mtx1);
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
    std::lock_guard<std::mutex> lock2(mtx2);
    std::cout << "Nit 1 je stekla oba zaptivača\n";
}

void thread2() {
    std::lock_guard<std::mutex> lock2(mtx2);
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
    std::lock_guard<std::mutex> lock1(mtx1);
    std::cout << "Nit 2 je stekla oba zaptivača\n";
}

int main() {
    std::thread t1(thread1);
    std::thread t2(thread2);
    t1.join();
    t2.join();
    return 0;
}

U ovom primeru, može doći do deadlock-a ako nit1 stekne mtx1, a nit2 mtx2, i oboje čekaju da drugi oslobodi resurs.