2016-04-10 6 views
0

so habe ich online ein bisschen nach einer Antwort gesucht und nichts scheint klar zu beantworten. Meine Frage ist einfach, ich brauche, sagen wir, 5 Worker-Threads, um in eine Warteschlange einzutreten und dann ihrem Boss-Thread (Thread 6) zu signalisieren, dass sie alle in der Warteschlange bereit für die Arbeit sind. Aufgrund der Art und Weise, wie der Rest meines Programms funktioniert, wäre es am besten, wenn das, was ich erreichen möchte, funktioniert:Ruft pthread_cond_signal (...) und dann rufen pthread_cond_wait (...) den Kellner auf?

Also wenn ich den Boss-Thread die Sperre getroffen habe, sehen Sie, dass die Warteschlange nicht vollständig ist voll, wird der Chef pthread_cond_wait(...); und warten, bis es voll ist. Jetzt kommen alle Arbeitsfäden in die Warteschlange und treffen eine Wartezeit, und sobald der letzte Thread eintritt, signalisiert er dem Master und wartet dann. Also zwischendurch, wenn der letzte Arbeiter signalisiert, wann er auf seine Wartezeit trifft, wartet der Chef noch, bis der letzte Helfer die Wartezeit erreicht? Weil ich nicht möchte, dass der Chef etwas macht, bis der letzte Thread wirklich wartet. Also wird der letzte Thread nicht schlagen ein pthread_mutex_unlock(...) wird er ein pthread_cond_wait(...) schlagen und ich möchte überprüfen, dass dies uns den Chef wecken wird. Vielen Dank im Voraus, ich hoffe, meine Frage ist klar, ich neige dazu, alles zu erklären:/

Antwort

0

Der Chef kann n-mal für Signale von den Arbeitern gesendet werden. Jedes Mal, wenn es aktiviert wird, prüft es die Warteschlangenlänge und wartet erneut, wenn es nicht voll ist. Es ist besser, Semaphor in diesem Fall zu verwenden.

0

Wenn der "Boss-Thread" in pthread_cond_wait() blockiert ist, kann er nicht weiter ausgeführt werden, bis er den Mutex, der an diese Funktion übergeben wurde, erneut erfassen kann.

Also, wenn der Thread, der Chef-Thread signalisiert hat, ist, dass Mutex hält, wird der Chef Faden nicht fortgesetzt werden, bis die Signalisierungs Thread den Mutex freigibt - die entweder durch pthread_mutex_unlock() oder pthread_cond_wait() sein kann (was den Mutex freigibt während des Wartens).

Verwandte Themen