Back to questions
Junior — Middle
97
Какие стандартные механизмы для синхронизации потоков ты используешь или знаешь в библиотеке стандартных функций?
Answer from AI
sobes.tech AI
В стандартной библиотеке C++ для синхронизации потоков используются следующие механизмы:
- std::mutex — базовый мьютекс для взаимного исключения.
- std::lock_guard и std::unique_lock — RAII-обёртки для автоматического захвата и освобождения мьютекса.
- std::condition_variable — для ожидания и уведомления между потоками.
- std::atomic — для атомарных операций без блокировок.
Пример использования мьютекса и condition_variable:
#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 value = dataQueue.front();
dataQueue.pop();
// обработка value
}
Эти механизмы позволяют эффективно и безопасно синхронизировать доступ к общим ресурсам между потоками.