Les fils POSIX – Ne faites quelque chose qu’une seule fois

Quel est le moyen le plus simple de s’assurer qu’une région de code ne peut être exécutée que par un seul thread?

Supposons qu’il y a n threads ( n de 1)

 // do this once int x; x = some_function(); printf( "%d\n", x ); 

Est-ce que j’utilise une variable partagée et une barrière? Laisser toutes les variables assigner leur ID de thread (?) À une variable partagée, puis le dernier thread à écrire dans la variable pourrait être le thread principal? Ensuite, plus tard dans le programme, vous pourrez vérifier l’ID du thread par rapport à la variable partagée.

Merci beaucoup.

Merci beaucoup.

Essayez la fonction pthread_once (). C’est fait pour ce but express. http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_once.html

Vous utiliseriez une variable partagée pour stocker le résultat. Pour vous assurer que la variable est stable, vous pouvez envelopper le pthread_once () avec un mutex. Tous les threads auraient besoin de verrouiller et de déverrouiller le mutex, tandis que la plupart ne feraient rien au milieu, mais de cette manière, la variable sera entièrement mise à jour avant qu’un thread ne soit autorisé à continuer.