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(oderacquire) 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(oderrelease) 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.