2

Ich beobachtete Operating system course part 2 lecture 2 video 17. In dieser Vorlesung erwähnte sie, dass die Datenstruktur von Zustandsvariable enthält Mutex Referenz und Liste der wartenden Threads.Eine Bedingung Variable, mehrere Mutexe

Ich möchte wissen, ob es möglich ist, die gleiche Bedingung mit verschiedenen Mutexe zu verwenden?

Zum Beispiel: Ich habe 2 wait Aussagen

  1. wait (mutex1, condition_A)
  2. wait (mutex2, condition_A) // Bedingung ist die gleiche sowohl in

Wenn die Antwort zu der obigen Frage ist ja, dann werden diese beiden Aussagen zwei Zustandsvariablen oder eine erstellen? Hinweis: Im Vortrag wurde nur eine Mutex-Referenz erwähnt.

Antwort

0

Ich denke, es hängt von der Implementierung ab.

POSIX sagt:

Wenn ein Thread wartet auf eine Bedingungsvariable auf einen insbesondere Mutex angegeben, die entweder die pthread_cond_timedwait() oder pthread_cond_wait() Betrieb eine dynamische Bindung zwischen dass Mutex und Zustandsgröße gebildet wird, das bleibt so lange in Kraft, wie bei mindestens ein Thread auf der Zustandsvariablen blockiert ist. Während dieser Zeit Zeit ist die Wirkung eines Versuches von einem Thread auf diese Bedingung Variable mit einem anderen Mutex warten, ist undefiniert. Sobald alle wartenden Threads entsperrt wurden (wie durch die Operation pthread_cond_broadcast() ), soll die nächste Warteoperation für diese Bedingungsvariable eine neue dynamische Bindung mit dem von dieser Warteoperation spezifizierten Mutex bilden.

So können Sie die gleiche Bedingung Variable mit Unterschied Mutexe, aber nicht zur gleichen Zeit.

In Bezug auf C++, cppreference.com sagt:

Der Aufruf dieser Funktion, wenn lock.mutex() nicht das gleiche Mutex wie die von allen anderen Threads verwendet wird, die zur Zeit auf dem gleichen Bedingungsvariable warten ist nicht definiertes Verhalten .

Es scheint also die gleichen Anforderungen wie POSIX-Bedingung Variablen zu haben.

Verwandte Themen