2010-05-01 28 views
0

Je suis enterré dans des documents multithread/parallelism, essayant de comprendre comment implémenter une implémentation de threading dans un langage de programmation que j'ai conçu. J'essaie de mapper un modèle mental à la bibliothèque pthreads.h, mais j'ai un problème avec une chose: j'ai besoin de mes instances d'interprète pour continuer à exister après avoir terminé l'interprétation d'un routine (la fermeture/la fonction du langage) type de données), parce que je veux leur attribuer plus tard autresroutine pour leur interprétation, ce qui me permet d'économiser le temps d'installation et de démontage du thread et de l'interpréteur.Existe-t-il un moyen de 'joindre' (bloquer) dans les threads POSIX, sans quitter le rôle?

Ce serait bien, sauf que pthread_join(3) exige que j'appelle pthread_exit(3) pour «débloquer» le fil d'origine. Comment puis-je bloquer le thread d'origine (lorsqu'il a besoin du résultat de l'exécution du routine), puis le débloquer lorsque l'interprétation de la routine enfant est terminée?

Répondre

1

Utiliser un pthread_cond_t; attendez-le sur un fil et signalez-le ou diffusez-le dans l'autre.

+0

Juste un sémaphore peut être suffisant dans ce cas - init avec la valeur 0, attendez-le dans un thread et postez-le dans l'autre. Même principe, cependant. –

+0

Quand vous dites 'attendez', voulez-vous dire simplement une boucle serrée contre le fil d'origine? C'est ... eh bien, j'essayais d'éviter une solution aussi hacky/boiteuse. Je veux réellement geler le thread en utilisant la bibliothèque 'pthread.h' si je le peux, de sorte qu'il ne soit même pas programmé: cela devrait économiser beaucoup de temps d'exécution, non? – ELLIOTTCABLE

+0

@elliotcable: Je faisais référence à pthread_cond_wait: http://opengroup.org/onlinepubs/007908799/xsh/pthread_cond_wait.html – rpetrich

1

On dirait que vous voulez réellement une implémentation du Thread Pool Pattern. Il fait pour un modèle conceptuel assez simple, sans création répétée de fil & réduire les coûts. Certains systèmes d'exploitation le supportent directement, d'autres doivent être raisonnablement simples à mettre en œuvre en utilisant une file d'attente et un sémaphore.

+0

Oui, à peu près. Je suis juste à la recherche des appels 'pthread.h' appropriés, ou tout ce que j'ai besoin d'étudier, pour créer ceci. – ELLIOTTCABLE