Sobes.tech
Junior — Middle

გთხოვთ, ახსნათ std::condition_variable-ის დანიშნულება და მუშაობა C++-ში.

sobes.tech AI

პასუხი AI-სგან

C++ dilində std::condition_variable sinxronizasiyanı təşkil etmək üçün istifadə olunur. Bu, bir və ya bir neçə iş parçacığının müəyyən bir hadisənin baş verməsini gözləməsinə imkan verir, eyni zamanda, ilk iş parçacığının gözlədiyi vəziyyəti dəyişə bilən digər iş parçacıkları üçün mutex-i azad edir.

Əsas nöqtələr:

  • İş parçacığı wait-i condition_variable üzərində çağırır və ona öz mutexini ötürür.
  • Gözləmə zamanı mutex azad edilir, bu da digər iş parçacıklarının paylaşılan məlumatlara daxil olmasına imkan verir.
  • Hadisə baş verdikdə, başqa bir iş parçacığı notify_one və ya notify_all çağırır və gözləyən iş parçacıklarını oyadır.
  • Oyanandan sonra, iş parçacığı yenidən mutexi alır və şərti yoxlayır.

İstifadə nümunəsi:

#include <mutex>
#include <condition_variable>
#include <queue>

std::mutex mtx;
std::condition_variable cv;
std::queue<int> dataQueue;

void producer() {
    std::unique_lock<std::mutex> lock(mtx);
    dataQueue.push(42);
    cv.notify_one();
}

void consumer() {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, []{ return !dataQueue.empty(); });
    int data = dataQueue.front();
    dataQueue.pop();
    // məlumatların işlənməsi
}

Beləliklə, condition_variable aktiv sorğusuz iş parçacqları arasında gözləmə və bildirişləri səmərəli təşkil etməyə kömək edir.