Über diese Sample-Semaphore-Implementierungen (für SMP-Systeme), verstehe ich das Test-and-Set ist für multiprocessor atomic checks erforderlich. Sobald wir jedoch die atomaren Überprüfungen hinzugefügt haben, sind die disable interrupts nicht mehr redundant? Die Deaktivierungsunterbrechungen bieten jedenfalls nur Atomizität über einen Prozessor. Der Zusatz zur Semaphor-Warteschlange muss ebenfalls geschützt werden.Semaphore-Implementierung: Warum sind deaktivierende Interrupts zusammen mit Test-und-Set erforderlich?
class semaphore {
private int t;
private int count;
private queue q;
public semaphore(int init)
{
t = 0;
count = init;
q = new queue();
}
public void P()
{
Disable interrupts;
while (TAS(t) != 0) { /* just spin */ };
if (count > 0) {
count--;
t = 0;
Enable interrupts;
return;
}
Add process to q;
t = 0;
Enable interrupts;
Redispatch;
}
public V()
{
Disable interrupts;
while (TAS(t) != 0) { /* just spin */ };
if (q == empty) {
count++;
} else {
Remove first process from q;
Wake it up;
}
t = 0;
Enable interrupts;
}
}
Dies ist Hausaufgabe Frage Stack Overflow die Hausaufgaben zu machen. Siehe "_Warum müssen wir noch Interrupts deaktivieren, zusätzlich zu Test und Set? _" In http://pages.cs.wisc.edu/~bart/537/lecturenotes/s10.html wo der Code herkommt (sehr wahrscheinlich). Die Frage erfüllt derzeit nicht http://stackoverflow.com/help/on-topic: "_Fragen, die nach Hausaufgaben fragen, müssen eine Zusammenfassung der bisherigen Arbeit enthalten, um das Problem zu lösen, und eine Beschreibung der Schwierigkeit du hast es gelöst_ " – xmojmr
Danke, @xmojmr - ich habe gerade darüber nachgedacht, das zu beantworten. Jetzt wird es runter/nah. –
Diese Frage scheint off-topic zu sein, da es sich um eine Hausaufgaben-Dump handelt. –