Non, le -lpthread ne suffit pas. Il faut, dès l'étape de compilation, rajouter le define _REENTRANT (ie passer -D_REENTRANT à gcc). C'est de première importance pour (entre autres) "errno" (variable partagée sans le define, macro utilisant une variable __thread ou un appel à un truc genre pthread_getspecific avec le define).
Toutes fonctions marquées "MT-safe" dans le man deviendront réentrantes. Il y a des exceptions (gethostbyname, gethostent, etc...) mais elles ont leur equivalent reentrant (suffixe "_r"). RTFM.
Donc printf deviendra reentrant, au sens ou si tu veux afficher "abcd", tu auras toujours 'a' 'b' 'c' 'd' affiches dans cet ordre et sans risque de bug aleatoire. Mais aucune synchro n'est prise pour que 2 printf ne s'entrelacent pas. Ce qui veut dire qu'un printf("abcd") peut tres bien s'entrelacer avec un printf("efgh").
[^] # Re: Si j'ai bien saisi
Posté par David Decotigny . En réponse au message fonctions standards thread-safe ?. Évalué à 3.
Toutes fonctions marquées "MT-safe" dans le man deviendront réentrantes. Il y a des exceptions (gethostbyname, gethostent, etc...) mais elles ont leur equivalent reentrant (suffixe "_r"). RTFM.
Donc printf deviendra reentrant, au sens ou si tu veux afficher "abcd", tu auras toujours 'a' 'b' 'c' 'd' affiches dans cet ordre et sans risque de bug aleatoire. Mais aucune synchro n'est prise pour que 2 printf ne s'entrelacent pas. Ce qui veut dire qu'un printf("abcd") peut tres bien s'entrelacer avec un printf("efgh").