J'ai écrit une bibliothèque basée sur C et pour qu'elle fonctionne en multi-thread parallèlement, je crée des mutex globaux dans la fonction init.Comment protéger la fonction init d'une bibliothèque basée sur C?
Je m'attends à ce que la fonction init soit appelée dans le thread principal avant que les API de bibliothèque ne soient utilisées dans le multi-thread. Mais, si la fonction init elle-même est appelée directement dans le multithread, alors c'est un problème. Y at-il un moyen de protéger la fonction init elle-même de ma bibliothèque? Une façon que je peux penser est de demander à l'application de créer un mutex et de protéger les appels parallèles à ma fonction init, mais puis-je le protéger de ma bibliothèque elle-même?
Peut-on les utiliser seulement avec dlopen ou cela fonctionnera-t-il même si on lie la bibliothèque dynamique en utilisant l'option -l à l'application? – Jay
Cela semble être l'option spécifique de GCC. J'ai une application dans laquelle la bibliothèque sera liée en utilisant l'option -l et la même bibliothèque sera chargée en utilisant aussi dlopen. Que va-t-il se passer dans ce cas? Le constructeur sera-t-il appelé deux fois? – Jay
Je pense que la réponse est oui. Constructeur et Destructeur fonctionnent également pour les exécutables standard. Voir http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/Function-Attributes.html#Function-Attributes – doron