Sobes.tech
Middle+

Můžete uvést příklad situace, kdy dochází k vzájemnému blokování procesů, které je navždy zasekne?

sobes.tech AI

Odpověď od AI

Vzájemná blokace (deadlock) nastává, když dva nebo více procesů (nebo vláken) současně drží zdroje a každý čeká na uvolnění zdroje, který drží jiný proces. V důsledku toho žádný z nich nemůže pokračovat.

Příklad:

  • Proces A získá zdroj R1.
  • Proces B získá zdroj R2.
  • Proces A se pokusí získat zdroj R2 a zablokuje se, čekajíc na jeho uvolnění.
  • Proces B se pokusí získat zdroj R1 a také se zablokuje.

Oba procesy čekají na sebe navzájem, což vede k nekonečnému zablokování.

Příklad v C++ s mutexy:

#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 << "Vlákno 1 získalo oba zámky\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 << "Vlákno 2 získalo oba zámky\n";
}

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

V tomto příkladu může dojít k deadlocku, pokud vlákno 1 získá mtx1 a vlákno 2 mtx2, a oba čekají na uvolnění zdroje od druhého.