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 βοηθά στην αποτελεσματική οργάνωση της αναμονής και της ειδοποίησης μεταξύ νημάτων χωρίς ενεργό ερώτηση (polling).