Sobes.tech
Junior — Middle

Könnten Sie erklären, was ein Semaphore ist und wie es zur Synchronisation von Prozessen verwendet wird?

sobes.tech KI

Antwort von AI

Der Semaphor ist ein Synchronisationsmechanismus, der verwendet wird, um den Zugriff auf eine gemeinsam genutzte Ressource in einer Multithread- oder Multiprozessumgebung zu steuern. Er enthält einen Zähler, der angibt, wie viele Threads oder Prozesse gleichzeitig auf die Ressource zugreifen können.

Funktionsprinzip:

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

Unter iOS wird häufig die Klasse DispatchSemaphore aus GCD verwendet:

let semaphore = DispatchSemaphore(value: 1) // 1 bedeutet, dass die Ressource für einen Thread verfügbar ist

// Im Thread:
semaphore.wait()   // wartet, bis die Ressource verfügbar ist
// Arbeit mit der Ressource
semaphore.signal() // gibt die Ressource frei

Auf diese Weise helfen Semaphoren, Race Conditions zu vermeiden und gewährleisten einen korrekten Zugriff auf gemeinsam genutzte Ressourcen.