Ein Semaphor muss atomar sein. Ist es

Dieser Code stammt aus Pintos-Quelle:https: //www.cs.usfca.edu/~benson/cs326/pintos/pintos/src/threads/synch.

void
sema_down (struct semaphore *sema) 
{
  enum intr_level old_level;

  ASSERT (sema != NULL);
  ASSERT (!intr_context ());

  old_level = intr_disable ();
  while (sema->value == 0) 
    {
      list_push_back (&sema->waiters, &thread_current ()->elem);
      thread_block ();
    }
  sema->value--;
  intr_set_level (old_level);
}

Die Tatsache, ein Semaphor zu nehmen, istsema->value--;. Wenn es funktioniert, muss es eine atomare Operation sein. Wie können wir wissen, dass es sich tatsächlich um eine atomare Operation handelt? Ich weiß, dass die moderne CPU garantiert, dass der ausgerichtete Speicherbetrieb (für Wort / Doppelwort / Vierfachwort - davon hängt es ab) atomar ist. Aber hier bin ich nicht überzeugt, warum es atomar ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage