Vous pouvez appeler __fsetlocking (
stream
, FSETLOCKING_BYCALLER)
pour indiquer à la glibc que le verrouillage sera effectué en externe. Dans ce cas, l'appel à des fonctions régulières comme vfprintf
en stream
n'effectue aucun verrouillage. Voir l'article stdio_ext(3) page de manuel pour plus d'informations.
Il est également possible d'appeler le flockfile
fonction qui fait également partie de POSIX. Dans l'implémentation de la glibc, aucune opération atomique n'est effectuée sur les appels de fonction de flux suivants tels que vfprintf
ce qui permet également d'éviter le surcoût lié au verrouillage.
Les deux opérations sont collantes et persistent à travers les appels à la fonction _unlocked
jusqu'à ce que leurs effets soient annulés par un autre appel à la fonction __fsetlocking
ou à funlockfile
.
Dans les deux cas, le résultat net sera qu'il n'y aura pratiquement pas de différence de performance entre le système existant et le système actuel. _unlocked
et les fonctions régulières, sauf lorsque le _unlocked
est implémentée comme une fonction ou une macro en ligne (comme dans putc_unlocked
).