Sobes.tech
Junior — Middle

Können Sie erklären, was ein Semaphore-Mechanismus in der Programmierung ist und wie er zur Synchronisierung von Threads verwendet wird?

sobes.tech KI

Antwort von AI

Der Semaphor ist ein Synchronisationsmechanismus, der verwendet wird, um den Zugriff mehrerer Threads auf eine begrenzte Ressource zu steuern.

Er enthält einen Zähler, der angibt, wie viele Threads gleichzeitig auf die Ressource zugreifen können. Wenn ein Thread den kritischen Abschnitt betreten möchte, führt er die Operation "wait" (oder P) aus, wodurch der Zähler verringert wird. Wenn der Zähler negativ wird, wird der Thread blockiert. Wenn der Thread den kritischen Abschnitt verlässt, führt er die Operation "signal" (oder V) aus, erhöht den Zähler und entsperrt wartende Threads.

Beispiel für die Verwendung eines Semaphors in C++ mit POSIX API:

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

sem_t semaphore;

void* worker(void* arg) {
    sem_wait(&semaphore); // Ressource ergreifen
    std::cout << "Thread arbeitet\n";
    // Arbeit mit der Ressource
    sem_post(&semaphore); // Ressource freigeben
    return nullptr;
}

int main() {
    sem_init(&semaphore, 0, 3); // Erlaubt gleichzeitig 3 Threads
    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;
}

Auf diese Weise beschränkt der Semaphor die Anzahl der Threads, die gleichzeitig mit einer Ressource arbeiten, verhindert Race Conditions und sorgt für Korrektheit.