C: Was ist der Weg, um eine poolthread mit pthreads?
Habe ich eine Warteschlange von jobs, und ich will einen pool von 4 threads in denen ich werfen kann meine Aufträge an. Was ich geblieben bin, ist, wie man die Fäden und halten Sie Sie ausgesetzt werden, während es gibt keine Arbeit.
JOB QUEUE | job1 | job2 | job3 | job4 | ..
THREAD POOL | thread1 | thread2 | thread3 | thread4 |
Erstellen der threads, die ich derzeit bei der Initialisierung Punkt:
for (t=0; t<num_of_threads; t++){
pthread_create(&(threads[t]), NULL, doSth2, NULL);
}
Wo num_of_threads=4 und doSth2 ist eine Funktion, mit nichts drin.
Also erst einmal ich habe die 4 threads und Sie sind fertig mit doSth2, wie kann ich Ihnen neue Arbeit zu tun, ohne Sie zu töten?
InformationsquelleAutor der Frage Pithikos | 2011-08-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Schlüssel zu einem thread-pool ist eine Warteschlange. Hier sind geänderte Funktionen für thread-pool-ich entwickelt haben.
Setzen element in der Warteschlange
Bekommen element aus der Warteschlange
InformationsquelleAutor der Antwort cnicutar
Als Alternative-riff auf cnicutar Antwort können Sie nur verwenden,POSIX message queuesdie kümmern sich um die Synchronisation betrifft den kernel. Es wird einige kleine Aufwand für die system-Aufrufe, die möglicherweise oder möglicherweise nicht von Bedeutung sein. Es ist ziemlich minimal, da der kernel tut alles, was Sie zu tun haben, manuell sowieso.
Den consumer-threads können nur blockieren auf
mq_receive
und wenn Sie erstellen eine Besondere Art von queue-Nachricht macht es einfach, zu sagen, die threads beim Herunterfahren.InformationsquelleAutor der Antwort Duck