Junior — Middle
C++-da std::condition_variable-in məqsədini və iş prinsipini izah edin.
sobes.tech Süni İntellekt
AI-dan cavab
C++ dilində std::condition_variable sinxronizasiya üçü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 və 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ığı
waitfunksiyasını 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 verilərə daxil olmasına imkan verir.
- Hadisə baş verdikdə, başqa bir iş parçacığı
notify_onevə yanotify_allçağırır və gözləyən iş parçacıklarını oyadır. - Oyanandan sonra, iş parçacığı mutexi yenidən ələ keçirir 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 emalı
}
Bu şəkildə, condition_variable gözləmə və bildirişləri səmərəli təşkil etməyə kömək edir, aktiv sorğulama olmadan iş parçacqları arasında əlaqəni asanlaşdırır.