Sobes.tech
Junior — Middle

Erklären Sie den Zweck und die Funktionsweise von std::condition_variable in C++.

sobes.tech KI

Antwort von AI

std::condition_variable in C++ wird verwendet, um die Synchronisation zwischen Threads zu organisieren. Es ermöglicht einem oder mehreren Threads, auf ein bestimmtes Ereignis zu warten, während gleichzeitig ein Mutex freigegeben wird, damit andere Threads den Zustand ändern können, auf den der erste Thread wartet.

Wichtige Punkte:

  • Der Thread ruft wait auf einer condition_variable auf und übergibt den Mutex, den er besitzt.
  • Während des Wartens wird der Mutex freigegeben, sodass andere Threads Zugriff auf die gemeinsam genutzten Daten haben.
  • Wenn das Ereignis eintritt, ruft ein anderer Thread notify_one oder notify_all auf, um die wartenden Threads zu wecken.
  • Nach dem Erwachen übernimmt der Thread wieder den Mutex und überprüft die Bedingung.

Beispiel für die Verwendung:

#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();
    // Verarbeitung von data
}

Auf diese Weise hilft condition_variable, das Warten und die Benachrichtigung zwischen Threads effizient zu organisieren, ohne aktives Polling.