Sobes.tech
Junior — Middle

Können Sie das Funktionsprinzip eines Semaphors in der Multithread-Programmierung erklären?

sobes.tech KI

Antwort von AI

Ein Semaphor ist ein Synchronisationsmechanismus in der Multithread-Programmierung, der den Zugriff auf eine gemeinsame Ressource steuert. Es enthält einen Zähler, der angibt, wie viele Threads gleichzeitig auf die Ressource zugreifen können.

Funktionsprinzip:

  • Anfangs wird der Zähler des Semaphors auf eine Zahl gesetzt, die der Anzahl der verfügbaren Ressourcen entspricht.
  • Wenn ein Thread Zugriff erhalten möchte, ruft er die Operation "wait" (oder "acquire") auf, die den Zähler um 1 verringert.
  • Wenn der Zähler kleiner als null wird, wird der Thread blockiert und wartet, bis ein anderer Thread die Ressource freigibt.
  • Wenn ein Thread die Ressource freigibt, ruft er die Operation "signal" (oder "release") auf, die den Zähler um 1 erhöht und wartende Threads entsperrt.

Beispiel in Swift mit DispatchSemaphore:

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

DispatchQueue.global().async {
    semaphore.wait() // Zugriff versuchen
    print("Thread hat mit der Arbeit begonnen")
    sleep(2) // Arbeitssimulation
    print("Thread hat die Arbeit beendet")
    semaphore.signal() // Ressource freigeben
}

Auf diese Weise hilft das Semaphor, die Anzahl der Threads zu begrenzen, die gleichzeitig mit einer gemeinsamen Ressource arbeiten, Race Conditions zu vermeiden und die Datenintegrität zu gewährleisten.