Sobes.tech
Junior — Middle

C++та std::condition_variable-дин максаты жана иштөө принципин түшүндүрүңүз.

sobes.tech AI

AIден жооп

C++ тилиндеги std::condition_variable бир нече жиптин синхрондоштуруу уюштуруусуна жардам берет. Ал бир же бир нече жип белгилүү бир окуянын болушун күтүүгө мүмкүндүк берет, ошол эле учурда биринчи жип күтүп жаткан абалды өзгөртүүгө башка жиптерге мүмкүндүк берүү үчүн mutexти бошотот.

Негизги учурлар:

  • Жип wait деп condition_variable үстүндө чакырат, өзүнүн mutexин өткөрүп берет.
  • Күтүү учурунда mutex бошотулат, бул башка жиптерге бөлүштүрүлгөн маалыматтарга кирүүгө мүмкүндүк берет.
  • Окуя болуп калганда, башка жип notify_one же notify_all деп чакырып, күтүп жаткан жиптерди ойготот.
  • Оянгандан кийин, жип кайра mutexти алат жана шартты текшерет.

Колдонуу мисалы:

#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();
    // маалыматтарды иштетүү
}

Ушул жол менен, condition_variable активдүү суроо-талапсыз жиптердин ортосунда күтүүнү жана билдирүүнү эффективдүү уюштурууга жардам берет.