Sobes.tech
Junior — Middle
128

Poți explica ce reprezintă un mecanism de semafor în programare și cum este folosit pentru sincronizarea firelor?

Răspuns de la AI

sobes.tech AI

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

Он содержит счётчик, который показывает, сколько потоков могут одновременно получить доступ к ресурсу. Когда поток хочет войти в критическую секцию, он выполняет операцию "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;
}

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