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
waitauf 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_oneodernotify_allauf, 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.