39 votes

Ai-je besoin de -D_REENTRANT avec -pthread ?

Sous Linux (noyau 2.6.5), notre système de construction appelle gcc avec -D_REENTRANT.

Est-ce toujours nécessaire lors de l'utilisation de pthreads ?

En quoi est-il lié à l'option gcc -pthread ? Je comprends que je devrais utiliser -pthread avec pthreads, ai-je encore besoin de -D_REENTRANT ?

En passant, y a-t-il une différence que vous connaissez entre l'utilisation de REENTRANT entre gcc 3.3.3 et gcc 4.x.x ?

Lorsque j'utilise l'option -pthread de gcc, je peux voir que _REENTRANT est défini. Est-ce que l'omission de -D_REENTRANT de la ligne de commande fera une différence, par exemple certains objets pourraient être compilés sans support multithread puis liés dans un binaire qui utilise pthreads et causerait des problèmes ?

Je suppose qu'il devrait être ok juste d'utiliser : g++ -pthread

> echo | g++          -E -dM -c - > monofil
> echo | g++ -pthread -E -dM -c - > multithreaded
> diff monofil multithreaded
39a40
> #define _REENTRANT 1

Nous compilons plusieurs bibliothèques statiques et des applications qui se lient aux bibliothèques statiques, les deux bibliothèques et applications utilisent pthreads.

Je crois que c'était nécessaire à un certain stade passé mais je veux savoir si c'est toujours nécessaire. Les recherches sur Google n'ont pas renvoyé des informations récentes mentionnant -D_REENTRANT avec pthreads. Pourriez-vous me diriger vers des liens ou des références discutant de l'utilisation dans des versions récentes de kernel/gcc/pthread ?

Clarification : Actuellement nous utilisons -D_REENTRANT et -lpthread, je suppose que je peux les remplacer juste par g++ -pthread, en regardant le man de gcc, cela définit les drapeaux pour à la fois le préprocesseur et le linker. Des pensées ?

17voto

stefanB Points 27796

Pour moi, la meilleure réponse était le commentaire de pts s'il avait pris la peine de le soumettre en tant que réponse :

Vous avez bien enquêté et répondu à votre propre question. Utilisez g++ -pthread, c'est équivalent à g++ -lpthread -D_REENTRANT. Utiliser g++ -D_REENTRANT serait différent, cela peut ne pas définir tous les drapeaux du lien. - pts 18 mai à 0h30

7voto

bdonlan Points 90068

Des pages d'information gcc:

`-pthread'
     Ajoute le support de l'exécution multithread avec la bibliothèque "pthreads". Cette
     option définit des indicateurs à la fois pour le préprocesseur et le lien.

Ainsi, le simple indicateur -pthread devrait suffire. Cependant, je ne recommanderais pas de le passer uniquement à certaines parties de votre code.

Comme Chris l'a suggéré dans les commentaires, l'utilisation de gcc -dumpspecs sur Linux confirme en effet qu'il définit également des indicateurs de préprocesseur :

%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}

5voto

Stobor Points 15428

Le drapeau -pthreads de gcc définit les drapeaux pertinents du compilateur et du linker nécessaires pour prendre en charge les pthreads sur la plate-forme sur laquelle vous vous trouvez.

Vous avez raison, sur linux x86 (et probablement sur de nombreuses autres plates-formes), cela équivaut à '-D_REENTRANT -lpthread' mais ce n'est pas nécessairement vrai sur toutes les plates-formes.

(Pendant un certain temps au moins, sur aix, -pthread a causé à g++ de lier une libstdc++.a complètement différente. Je ne sais pas si c'est toujours le cas maintenant, cependant...)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X