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.