Middle+
Proseslərin bir-birini blokladığı və sonsuza qədər ilişib qaldığı bir vəziyyət nümunəsi verə bilərsinizmi?
sobes.tech Süni İntellekt
AI-dan cavab
Çəkilmə (deadlock) iki və ya daha çox prosesin (və ya threadlərin) eyni zamanda resursları tutması və hər birinin digərinin sərbəst buraxmasını gözləməsi halında baş verir. Nəticədə, heç biri işləməyə davam edə bilmir.
Nümunə:
- Proses A R1 resursunu əldə edir.
- Proses B R2 resursunu əldə edir.
- Proses A R2 resursunu almağa çalışır və bloklanır, onun sərbəst buraxılmasını gözləyir.
- Proses B R1 resursunu almağa çalışır və o da bloklanır.
Hər iki proses bir-birini gözləyir, bu isə sonsuz bloklanmaya səbəb olur.
C++ ilə mutex nümunəsi:
#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 hər iki lock-i əldə etdi\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 hər iki lock-i əldə etdi\n";
}
int main() {
std::thread t1(thread1);
std::thread t2(thread2);
t1.join();
t2.join();
return 0;
}
Bu nümunədə, əgər thread1 mtx1-i və thread2 mtx2-ni əldə edərsə və hər ikisi digərinin resursunu gözləyərsə, deadlock baş verə bilər.