Junior — Middle
İki mutexin atomik kilidlənməsini necə təmin etmək və qarşılıqlı bloklamaları qarşısını almaq olar?
sobes.tech Süni İntellekt
AI-dan cavab
İki mutexin atomik şəkildə kilidlenməsi zamanı qarşılıqlı kilidlənmənin (deadlock) qarşısını almaq üçün aşağıdakı yanaşmalardan istifadə etmək mümkündür:
-
Həmişə mutexləri eyni ardıcıllıqla kilidləyin. Bu, deadlock-lərdən qaçınmanın ən sadə və yaygın yoludur.
-
std::lock (C++11 və yuxarı) istifadə edin. Bu funksiya bir neçə mutexi eyni zamanda kilidləyir və deadlock-un qarşısını alır.
std::lock nümunəsi:
#include <mutex>
std::mutex m1, m2;
void func() {
std::lock(m1, m2); // hər iki mutexi atomik şəkildə kilidləyir
std::lock_guard<std::mutex> lock1(m1, std::adopt_lock);
std::lock_guard<std::mutex> lock2(m2, std::adopt_lock);
// kritik bölmə
}
Burada std::lock hər iki mutexi kilidləyir, və std::lock_guard std::adopt_lock bayrağı ilə artıq kilidlənmiş mutexlərin idarəsini götürür.