Stimmt Semaphor begrenzt warten oder sie sind nur für die gegenseitige Ausgrenzung ??tun Semaphoren genügt beschränkt warten
Antwort
Antwort
brechen Wartezustand theoretisch begrenzt kann, wie Sie unten sehen werden. In der Praxis hängt es stark davon ab, welcher Scheduling-Algorithmus verwendet wird.
Die klassische Umsetzung von wait()
und signal()
primitiv ist wie:
//primitive
wait(semaphore* S)
{
S->value--;
if (S->value < 0)
{
add this process to S->list;
block();
}
}
//primitive
signal(semaphore* S)
{
S->value++;
if (S->value <= 0)
{
remove a process P from S->list;
wakeup(P);
}
}
Wenn ein Prozess die wait()
ruft und schlägt die „if“ Test, wird es sich in eine Warteliste gesetzt. Wenn mehrere Prozesse auf dem gleichen Semaphor blockiert sind, werden sie alle in diese Liste eingefügt (oder sie sind irgendwie miteinander verbunden, wie Sie sich vorstellen können). Wenn ein anderer Prozess den kritischen Abschnitt verlässt und das Signal() aufruft, wird ein Prozess in der Warteliste ausgewählt, um aufzuwachen und bereit zu sein, erneut um die CPU zu konkurrieren. Es ist jedoch der Scheduler, der entscheidet, welcher Prozess aus der Warteliste ausgewählt werden soll. Wenn die Planung zum Beispiel in einer LIFO-Methode (last in first out) implementiert wird, ist es möglich, dass ein Prozess ausgehungert wird.
Beispiel
T1: thread 1 calls wait(), enters critical section
T2: thread 2 calls wait(), blocked in waiting list
T3: thread 3 calls wait(), blocked in waiting list
T4: thread 1 leaves critical section, calls signal()
T5: scheduler wakes up thread 3
T6: thread 3 enters critical section
T7: thread 4 calls wait(), blocked in waiting list
T8: thread 3 leaves critical section, calls signal()
T9: scheduler wakes up thread 4
..
Wie Sie sehen können, obwohl Sie implementiert/verwendet den Semaphore richtig, Faden 2 hat eine unbeschränkte Wartezeit, möglicherweise sogar Hunger, durch kontinuierliche Eingabe neuer Prozesse verursacht.
- 1. Gesetztes Warten mit Semaphoren
- 2. warten, bevor Aktion Verwendung jquery tun
- 3. Warum sind Sempaphoren in Linux beschränkt?
- 4. Semaphoren: Kritischer Abschnitt mit Prioritäten
- 5. Parallele Prozesse mit Semaphoren in C
- 6. Dateisperrung im Vergleich zu Semaphoren
- 7. Initialisierung von Semaphoren mit sem_open
- 8. Semaphoren und Sperren in Ubuntu
- 9. Verstehen einer Prüfungsantwort auf Semaphoren
- 10. Semaphoren Notation - warum V und P statt S und W
- 11. Was beschränkt WCF ServiceModelService.Instances?
- 12. Bildsuchergebnisse beschränkt auf Bildschirmgröße
- 13. Unterschied zwischen Zählen und binären Semaphoren
- 14. Semaphoren in c Linux mit Client/Server
- 15. Undefined Referenzprobleme bei der Verwendung von Semaphoren
- 16. Implementierung von Semaphoren, Sperren und Zustandsvariablen
- 17. Wie lösen Verbraucher/Produzent Aufgabe mit Semaphoren
- 18. Simulieren von Kunden-/Mitarbeiter-Threads mit Warteschlangen und Semaphoren
- 19. async warten nicht warten
- 20. IAM-Richtlinie auf Lastenausgleich beschränkt
- 21. silverlight auf 100% Browserhöhe beschränkt
- 22. JavaScript-Prototyp auf Funktionen beschränkt?
- 23. Lucene beschränkt die Abfrage Begriffe
- 24. Wie wird zwischen gespaltenen Prozessen mit Semaphoren umgeschaltet?
- 25. Warten Sound
- 26. Ist die Skalatemplate auf 64k beschränkt?
- 27. warten shutil.copyfile
- 28. Erstellen von Semaphoren im gemeinsam genutzten Speicher in C?
- 29. Äquivalent von Sys V SEM_UNDO für Posix-Semaphoren
- 30. Warum muss die Methode acquire() in Semaphoren nicht synchronisiert werden?