Чем отличаются мьютекс и семафор?

Семафор — это механизм синхронизации, который используется для управления доступом нескольких потоков к ограниченному ресурсу.

Короткий ответ

Что ответить на собеседовании

Семафор — это механизм синхронизации, который используется для управления доступом нескольких потоков к ограниченному ресурсу.

Подробный разбор

Ответ с пояснениями

Семафор — это механизм синхронизации, который используется для управления доступом нескольких потоков к ограниченному ресурсу.

Он содержит счётчик, который показывает, сколько потоков могут одновременно получить доступ к ресурсу. Когда поток хочет войти в критическую секцию, он выполняет операцию "wait" (или P), уменьшая счётчик. Если счётчик становится меньше нуля, поток блокируется. Когда поток выходит из критической секции, он выполняет операцию "signal" (или V), увеличивая счётчик и разблокируя ожидающие потоки.

Пример использования семафора в C++ с POSIX API:

#include <semaphore.h>
#include <pthread.h>
#include <iostream>

sem_t semaphore;

void* worker(void* arg) {
    sem_wait(&semaphore); // захват ресурса
    std::cout << "Поток работает\n";
    // работа с ресурсом
    sem_post(&semaphore); // освобождение ресурса
    return nullptr;
}

int main() {
    sem_init(&semaphore, 0, 3); // разрешаем одновременно 3 потока
    pthread_t threads[5];
    for (int i = 0; i < 5; ++i) {
        pthread_create(&threads[i], nullptr, worker, nullptr);
    }
    for (int i = 0; i < 5; ++i) {
        pthread_join(threads[i], nullptr);
    }
    sem_destroy(&semaphore);
    return 0;
}

Таким образом, семафор позволяет ограничить число потоков, одновременно работающих с ресурсом, предотвращая гонки и обеспечивая корректность.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку