Middle+
Процестердин өз ара тоскоолдуусу болуп, аларды эчқашан бошотпогудай кылган учурдун мисалын келтире аласызбы?
sobes.tech AI
AIден жооп
Көчмө блокировка (deadlock) эки же көбүрөөк процесстердин (же тизмектердин) бир убакта ресурстарды кармап турушу жана ар бири башка процесстин бошоткон ресурсуна күтүп турушу менен болот. Натыйжада, эч ким ишин уланта албайт.
Мисал:
- Процесс A R1 ресурсуна ээ болот.
- Процесс B R2 ресурсуна ээ болот.
- Процесс A R2 ресурсуна ээ болууга аракет кылып, тоскоолдукка учурайт, анын бошотулушун күтүп.
- Процесс B R1 ресурсуна ээ болууга аракет кылып, ошондой эле тоскоолдукка учурайт.
Эки процесс бири-бирин күтүп жатышат, бул чексиз тоскоолдукка алып келет.
C++ менен mutex мисалы:
#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 << "Тиркеме 1 эки тосмону да алды\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 << "Тиркеме 2 эки тосмону да алды\n";
}
int main() {
std::thread t1(thread1);
std::thread t2(thread2);
t1.join();
t2.join();
return 0;
}
Бул мисалда, эгерде thread1 mtx1, ал thread2 mtx2 алса жана экиси бири-бирин күтүп жатса, deadlock пайда болушу мүмкүн.