Sobes.tech
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
}

Эти механизмы позволяют эффективно и безопасно синхронизировать доступ к общим ресурсам между потоками.