Hier ist die typische Art und Weise eine Zustandsgröße zu verwenden:Benötigen Bedingungsvariablen immer noch einen Mutex, wenn Sie den überprüften Wert atomar ändern?
// The reader(s)
lock(some_mutex);
if(protected_by_mutex_var != desired_value)
some_condition.wait(some_mutex);
unlock(some_mutex);
// The writer
lock(some_mutex);
protected_by_mutex_var = desired_value;
unlock(some_mutex);
some_condition.notify_all();
Aber wenn protected_by_mutex_var von etwa atomar festgelegt ist, eine Vergleichs- und Swap-Anweisung, wird der Mutex dient gegenstandslos (ausgenommen pThreads und andere APIs erfordern, dass Sie einen Mutex übergeben)? Ist es der Schutzzustand, der verwendet wird, um die Bedingung zu implementieren? Wenn nicht, ist es sicher, dann ist diese
// The writer
atomic_set(protected_by_mutex_var, desired_value);
some_condition.notify_all();
Mit dem Schriftsteller nie mit dem Leser der Mutex direkt in Wechselwirkung zu tun ?:? Beachten Sie, dass der Name 'protected_by_mutex_var' nicht mehr wirklich angemessen ist (es ist nicht mehr Mutex-geschützt). Wenn ja, ist es sogar notwendig, dass verschiedene Leser den gleichen Mutex verwenden?
Der ganze Sinn der Zustandsvariablen ist, dass sie „prüfen das Prädikat, schalte den Mutex zu machen, und schlaf "atomar. –