Warum braucht Pthread_cond_wait einen Mutex?
Warum braucht Pthread_cond_wait einen Mutex?

Video: Warum braucht Pthread_cond_wait einen Mutex?

Video: Warum braucht Pthread_cond_wait einen Mutex?
Video: Conditional Variable (Deutsch / German) 2024, Kann
Anonim

Die mutex wird verwendet, um die Bedingungsvariable selbst zu schützen. Deshalb bist du brauchen es schloss vor dir tun ein warten. Wenn dann die Bedingungsvariable signalisiert oder gesendet wird, werden einer oder mehrere Threads auf der Warteliste aufgeweckt und die mutex wird für diesen Thread auf magische Weise wieder gesperrt.

Entsperrt Pthread_cond_wait diesbezüglich Mutex?

Die pthread_cond_wait ()-Funktion blockiert den aufrufenden Thread für die Bedingungsvariable cond, und entsperrt der zugehörige mutex mutex . Der aufrufende Thread muss gesperrt sein mutex bevor Sie auf die Bedingungsvariable warten. Bei der Rückkehr aus der Funktion wird die mutex ist wieder gesperrt und gehört dem aufrufenden Thread.

Anschließend stellt sich die Frage, warum wird Mutex benötigt? Es stellt sicher, dass jeweils nur ein Thread einen Schlüsselcode ausführt, was wiederum den Zugriff auf eine Datenstruktur einschränkt. Es stellt sicher, dass die beiden Threads unabhängig von einer Neuordnung der CPU eine vollständige und korrekte Ansicht dieses Speichers haben. Die mutex ist eine absolute Notwendigkeit bei der gleichzeitigen Programmierung.

Warum benötigen Bedingungsvariablen außer oben einen Mutex?

Die Mutex ist verwendet, um die Bedingungsvariable selbst. Deshalb bist du brauchen es schloss vor dir tun ein warten. Dann, wenn die Bedingungsvariable ist an einen oder mehrere Threads auf der Warteliste signalisiert oder gesendet werden Wille aufgeweckt werden und die mutex wird für diesen Thread wieder magisch gesperrt werden.

Warum brauchen wir Bedingungsvariablen?

Bedingungsvariablen Lassen Sie eine Reihe von Fäden schlafen, bis sie gekitzelt werden! Sie können einen Thread oder alle schlafenden Threads kitzeln. Wenn Sie nur einen Thread aufwecken, entscheidet das Betriebssystem, welcher Thread aufgeweckt werden soll.

Empfohlen: