Middle+
Können Sie ein Beispiel für eine Situation geben, in der es zu einer gegenseitigen Blockierung von Prozessen kommt, die sie für immer hängen lässt?
sobes.tech KI
Antwort von AI
Deadlock (Verklemmung) tritt auf, wenn zwei oder mehr Prozesse (oder Threads) gleichzeitig Ressourcen halten und jeder auf die Freigabe einer Ressource wartet, die vom anderen Prozess gehalten wird. Infolgedessen kann keiner von ihnen fortfahren.
Beispiel:
- Prozess A erwirbt Ressource R1.
- Prozess B erwirbt Ressource R2.
- Prozess A versucht, Ressource R2 zu erlangen und wird blockiert, während er auf deren Freigabe wartet.
- Prozess B versucht, Ressource R1 zu erlangen und wird ebenfalls blockiert.
Beide Prozesse warten aufeinander, was zu einem Deadlock führt.
Beispiel in C++ mit 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 hat beide Locks erworben\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 hat beide Locks erworben\n";
}
int main() {
std::thread t1(thread1);
std::thread t2(thread2);
t1.join();
t2.join();
return 0;
}
In diesem Beispiel kann ein Deadlock auftreten, wenn thread1 mtx1 erwirbt und thread2 mtx2, und beide auf die Freigabe des jeweils anderen warten.