Sobes.tech
Junior — Middle

Мақсади ва фаъолияти std::condition_variable дар C++-ро шарҳ диҳед.

sobes.tech AI

Ҷавоб аз AI

std::condition_variable дар C++ барои ташкил додани ҳамоҳангсозии байни сӯрохҳо истифода мешавад. Он ба як ё чанд сӯрох имкон медиҳад, ки интизор шаванд, ки рӯйдоди муайян рӯй диҳад, дар ҳоле ки ҳамзамон 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 кӯмак мекунад, ки интизорӣ ва огоҳӣ байни сӯрохҳоро самаранок ташкил диҳад, бидуни пайвастаи фаъол.