Habe gerade ein Video auf Semaphoren gesehen und versucht zu graben für weitere Informationen. Nicht ganz sicher, wie ein Semaphor auf einer Baugruppenebene funktioniert.Nicht zu verstehen Semaphor auf niedrigem Niveau
P(s):
s = s - 1
if (s < 0) {wait on s}
CRITICAL SECTION
V(s):
s = s + 1
if(threads are waiting on s) {wake one}
Ich verstehe, was das Konzept hinter dieser Funktion ist jedoch Ich habe Probleme, meinen Kopf diese um wickeln.
sagen S = 1 und Sie haben 2 Themen: Thema 1 und Faden 2
Thread One Thread Two
load s load s
subtract s,1 subtract s,1
save s save s
Dann gibt es einen Kontextwechsel zwischen dem subtrahieren und die für beide Einstellung s auf 0 für beide speichern. Nicht beide Threads sehen s, wie 0 in den kritischen Abschnitt eintritt. Ich bin mir nicht sicher, wie ein Thread exklusiv wird, wenn es auf der Assembly-Ebene möglich ist, Kontextwechsel, so dass beide sehen können s = 0.
Sie haben den Teil "Warten auf s" in Ihrer Aufschlüsselung vergessen. –
Nicht sicher, was du meinst? Gibt es einen Mutex auf S? – train55255
Nein, kein Mutex, sondern ein Semaphor. Es ist eine andere Art von Synchronisationsmechanismus, aber genau wie ein Mutex liefert er typischerweise effizientes * Blockieren *, d. H. Es interagiert mit dem OS-Scheduler. –