1 votes

Quel est l'intérêt d'utiliser [-D_REENTRANT ] pour compiler un programme thread en c sous Ubuntu ?

Utilisez n'importe quel éditeur pour taper votre programme, puis compilez-le à l'aide du compilateurgcc :

$ gcc   t1.c –o t1 –lpthread [-D_REENTRANT]
$ ./t1s
Hello world!...

1voto

abu_bua Points 9377

De https://docs.oracle.com/cd/E19455-01/806-5257/compile-4/index.html

Définition de _REENTRANT ou _POSIX_C_SOURCE

Pour un comportement POSIX, compilez les applications avec l'indicateur -D_POSIX_C_SOURCE défini >= 199506L. Pour le comportement Solaris, compilez les programmes multithreads avec l'indicateur -D_REENTRANT. Ceci s'applique à chaque module d'une application.

Pour les applications mixtes (par exemple, les threads Solaris avec la sémantique POSIX), compilez avec les drapeaux -D_REENTRANT et -D_POSIX_PTHREAD_SEMANTICS.

Pour compiler une application monofilière, ne définissez ni l'indicateur -D_REENTRANT ni l'indicateur -D_POSIX_C_SOURCE. Lorsque ces drapeaux ne sont pas présents, toutes les anciennes définitions pour errno, stdio, et ainsi de suite, restent en vigueur.


Note -

Compilez des applications monofilières, non liées à l'un ou l'autre des éléments suivants bibliothèques de threads (libthread.so.1 ou libpthread.so.1), sans l'option -D_REENTRANT. -D_REENTRANT. Cela permet d'éliminer la dégradation des performances lorsque des macros, telles que putc(3s), sont converties en appels de fonctions réentrantes. réentrantes.


En résumé, les applications POSIX qui définissent -D_POSIX_C_SOURCE obtiennent la sémantique POSIX 1003.1c pour les routines listées dans le Tableau 7-1. Les applications qui définissent uniquement -D_REENTRANT obtiennent la sémantique Solaris pour ces routines. Les applications Solaris qui définissent -D_POSIX_PTHREAD_SEMANTICS obtiennent la sémantique POSIX pour ces routines, mais peuvent toujours utiliser l'interface threads Solaris.

Les applications qui définissent à la fois -D_POSIX_C_SOURCE et -D_REENTRANT obtiennent la sémantique POSIX.

0voto

abu_bua Points 9377

Ceci est tiré du manuel libc 8.2 :

Macro : _REENTRANT
Macro : _THREAD_SAFE

Ces macros sont obsolètes. Elles ont le même effet que de définir _POSIX_C_SOURCE avec la valeur 199506L.

Certaines très anciennes bibliothèques C nécessitaient la définition d'une de ces macros pour que la fonctionnalité de base (par exemple getchar) soit thread-safe.

Nous vous recommandons d'utiliser _GNU_SOURCE dans les nouveaux programmes. Si vous ne spécifiez pas l'option '-ansi' à GCC, ou d'autres options de conformité telles que -std=c99, et que vous ne définissez aucune de ces macros explicitement, l'effet est le même que de définir _DEFAULT_SOURCE à 1.

Lorsque vous définissez une macro de test des fonctionnalités pour demander une classe plus importante de caractéristiques, il n'est pas dangereux de définir en plus une macro de test de caractéristiques pour un sous-ensemble de ces caractéristiques. Par exemple, si vous définissez _POSIX_C_SOURCE, définir également _POSIX_SOURCE n'a aucun effet. De même, si vous définissez _GNU_SOURCE, alors définir soit _POSIX_SOURCE ou _POSIX_C_SOURCE n'a aucun effet.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X