Après avoir abandonné fork(), parce que trop lourd (duplication inutile, dans mon contexte d'utilisation, de certaines données), je me suis tourné vers les thread POSIX (pthread_create() et consort). Cette solution avait jusqu'à présent fonctionnée avec les différentes distribution Linux auxquelles j'avais à faire (entre autres une Redhat 7.2), jusqu'à ce que je la teste avec une Redhat 9. Avec cette dernière, un pthread_create ne crée aucun nouveau thread, sans pour autant retourner un code d'erreur. Cela n'est pas trop grave car j'avais de toute manière l'intention d'utiliser la fonction _clone(), qui est plus performante que pthread_create() (qui s'appuie d'ailleurs sur _clone(), me semble-t'il). Cependant, _clone() est spécifique à Linux.
Voici donc mes question :
- Est-ce que l'utilisation de _clone() est ce qu'il y a de plus efficace sous Linux pour faire du multitâche, ou y a-t'il d'autres fonctions encore plus performantes ?
- La fonction _clone() est-elle présente dans toutes les distributions Linux (sans avoir à recompiler le noyau) ?
- Comment détecter la disponibilité de la fonction _clone() et/ou des pthread durant la compilation (histoire de pouvoir utiliser l'un ou l'autre selon que mon programme est destiné à tourné sous Linux, un autre UNIX, ou Cygwin).
Question subsidiaire:
- Pourquoi les pthread_...() ne fonctionnent-ils plus avec la Redhat 9 (les sources sont visibles en suivant le lien sur la page http://epeios.org/epeios/cvs/, fichiers 'mtk.h' et 'mtk.cpp', mais je ne pense pas que le problème vienne des sources).
Merci d'avance pour vos réponses ...
[edit]Suite au message ci-dessous, correction du numéro de version de la Redhat (9.2 en 9)[/edit]
Partager