Sobes.tech
Junior — Middle

C++ da std::condition_variable ning maqsadi va ishlashini tushuntiring.

sobes.tech AI

AIdan javob

C++ tilida std::condition_variable sinxronizatsiya qilish uchun ishlatiladi. Bu bir yoki bir nechta iplar muayyan voqea yuz berishini kutishlariga imkon beradi, shu bilan birga, birinchi ip kutayotgan holatni o'zgartirish uchun mutexni bo'shatadi.

Asosiy nuqtalar:

  • Ip wait ni condition_variable ustida chaqiradi, unga o'zining mutexini uzatadi.
  • Kutish davomida mutex bo'shatiladi, bu esa boshqa iplarning umumiy ma'lumotlarga kirishiga imkon beradi.
  • Voqea yuz berganda, boshqa ip notify_one yoki notify_all ni chaqiradi, kutayotgan iplarni uyg'otish uchun.
  • Uyg'onganidan so'ng, ip yana mutexni oladi va shartni tekshiradi.

Foydalanish misoli:

#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();
    // ma'lumotlarni qayta ishlash
}

Shu tarzda, condition_variable kutish va bildirishni samarali tashkil qilishga yordam beradi, faol pollingsiz iplar o'rtasida muloqotni osonlashtiradi.