C: Quelle est la façon de faire un poolthread avec les pthreads?
J'ai une file d'attente de travaux et je veux faire une piscine de 4 threads où je peux jeter mon emplois à. Ce que je suis bloqué à l'est dans la façon de faire les fils et de les maintenir en suspension alors qu'il n'y a pas de travail.
JOB QUEUE | job1 | job2 | job3 | job4 | ..
THREAD POOL | thread1 | thread2 | thread3 | thread4 |
Pour créer les threads que j'ai actuellement à l'initialisation du point:
for (t=0; t<num_of_threads; t++){
pthread_create(&(threads[t]), NULL, doSth2, NULL);
}
Où num_of_threads=4 et doSth2 est une fonction avec rien à l'intérieur.
Donc, une fois que j'ai créé le 4 threads et ils sont fait avec doSth2, comment puis-je leur donner des nouvelles de travail à faire, sans les tuer?
OriginalL'auteur Pithikos | 2011-08-05
Vous devez vous connecter pour publier un commentaire.
La clé d'un pool de threads est une file d'attente. Ici sont modifiés de fonctions pour un pool de threads que j'ai développé.
Mettre de l'élément dans la file d'attente
Obtenir de l'élément de la file d'attente
les blocs jusqu'à ce que quelqu'un (
queue_add
) des signauxcond
.Désolé pour ouvrir ce si tard mais si le queue_get est le verrouillage du mtx et ensuite en boucle, comment pouvez-vous ajouter un élément, si le mtx est-il verrouillé? Ne pas le verrouillage de l'être après de la boucle (par exemple, boucle -> lock -> menu> unlock)?
Il y a un moment je sais - pour répondre à @AlexandreGomes - pthread_cond_wait (à partir de l'homme [linux.die.net/man/3/pthread_cond_wait]) déverrouille le mutex en attendant, pour les autres fil à utiliser, et renvoie avoir verrouillé à nouveau. D'où le mutex est passé en paramètre.
OriginalL'auteur cnicutar
Comme un autre riff sur cnicutar de réponse, vous pouvez simplement utiliser Files de messages POSIX qui prendra en charge la synchronisation des préoccupations dans le noyau. Il y aura quelques petits frais généraux pour les appels système qui peut ou peut ne pas être une préoccupation. Il est assez minime, car le noyau est en train de faire tout ce que vous avez à faire manuellement de toute façon.
Le consommateur threads peuvent se bloquer sur
mq_receive
et si vous créez un type spécial de la file d'attente de message, qu'il est facile de dire les discussions lors de la fermeture.OriginalL'auteur Duck