Middle+
Kunt u een voorbeeld geven van een situatie waarin processen elkaar blokkeren, waardoor ze voor altijd vast komen te zitten?
sobes.tech AI
Antwoord van AI
Deadlock (vastgelopen) treedt op wanneer twee of meer processen (of threads) tegelijkertijd bronnen vasthouden en elk wacht tot de ander een bron vrijgeeft. Hierdoor kunnen geen van hen doorgaan.
Voorbeeld:
- Proces A krijgt bron R1.
- Proces B krijgt bron R2.
- Proces A probeert bron R2 te krijgen en wordt geblokkeerd terwijl het wacht op vrijgave.
- Proces B probeert bron R1 te krijgen en wordt ook geblokkeerd.
Beide processen wachten op elkaar, wat leidt tot een oneindige blokkering.
Voorbeeld in C++ met mutexen:
#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 << "Thread 1 heeft beide locks\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 << "Thread 2 heeft beide locks\n";
}
int main() {
std::thread t1(thread1);
std::thread t2(thread2);
t1.join();
t2.join();
return 0;
}
In dit voorbeeld kan een deadlock optreden als thread1 mtx1 krijgt en thread2 mtx2, en beiden wachten op de ander.