Sobes.tech
Junior — Middle

Kunt u uitleggen wat een semafoormechanisme is in programmeren en hoe het wordt gebruikt voor het synchroniseren van threads?

sobes.tech AI

Antwoord van AI

Semaforen is een synchronisatie-mechanisme dat wordt gebruikt om de toegang van meerdere threads tot een beperkte bron te regelen.

Het bevat een teller die aangeeft hoeveel threads gelijktijdig toegang kunnen krijgen tot de bron. Wanneer een thread de kritieke sectie wil betreden, voert hij de operatie "wait" (of P) uit, waardoor de teller wordt verlaagd. Als de teller negatief wordt, wordt de thread geblokkeerd. Wanneer de thread de kritieke sectie verlaat, voert hij de operatie "signal" (of V) uit, waardoor de teller wordt verhoogd en de wachtende threads worden ontgrendeld.

Voorbeeld van het gebruik van een semaphore in C++ met POSIX API:

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

sem_t semaphore;

void* worker(void* arg) {
    sem_wait(&semaphore); // bron veroveren
    std::cout << "De thread werkt\n";
    // werken met de bron
    sem_post(&semaphore); // bron vrijmaken
    return nullptr;
}

int main() {
    sem_init(&semaphore, 0, 3); // toestaan dat 3 threads gelijktijdig werken
    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;
}

Op deze manier beperkt de semaphore het aantal threads dat gelijktijdig met een bron werkt, voorkomt racecondities en zorgt voor correctheid.