Sobes.tech
Junior — Middle

Können Sie erklären, was ein Semaphore im Kontext der Programmierung und Thread-Synchronisation ist?

sobes.tech KI

Antwort von AI

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

Es 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, versucht er, den "Semaphor" zu "erwischen":

  • Wenn der Zähler größer als null ist, wird er um eins verringert, und der Thread fährt fort.
  • Wenn der Zähler null ist, wird der Thread blockiert und wartet, bis ein anderer Thread das Semaphor freigibt.

Wenn ein Thread die Arbeit mit der Ressource beendet, gibt er das Semaphor frei, indem er den Zähler erhöht, sodass andere Threads fortfahren können.

Beispiel für die Verwendung eines Semaphors in Swift (iOS):

let semaphore = DispatchSemaphore(value: 2) // erlauben gleichzeitig 2 Threads

DispatchQueue.global().async {
    semaphore.wait() // versucht, das Semaphor zu ergreifen
    print("Thread hat mit der Arbeit begonnen")
    sleep(2) // Arbeitssimulation
    print("Thread hat die Arbeit beendet")
    semaphore.signal() // gibt das Semaphor frei
}

Auf diese Weise hilft das Semaphor, die Anzahl der gleichzeitig arbeitenden Threads mit einer gemeinsamen Ressource zu kontrollieren, Rennbedingungen zu vermeiden und die Korrektheit des Betriebs sicherzustellen.