2012-07-20 6 views
1

Quelle est la manière la plus simple de s'assurer qu'une région de code ne peut être exécutée que par un pthread?Les threads POSIX - ne faire qu'une seule fois

On suppose il y a des fils n (n pas égal à 1)

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

-je utiliser une variable partagée et une barrière? Laisser toutes les variables affecter leur ID de thread (?) À une variable partagée, puis le dernier thread à écrire dans la variable pourrait être le thread principal? Puis plus tard dans le programme, vous pouvez vérifier l'ID de thread contre la variable partagée?

Merci beaucoup.

Merci beaucoup.

Répondre

5

Essayez la fonction pthread_once(). C'est fait pour ce but précis. 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 alors que la plupart ne feraient rien au milieu, mais cela assurerait que la variable soit entièrement mise à jour avant que tout thread puisse continuer.

+0

Comment puis-je obtenir la valeur de retour d'une fonction que je veux appeler une fois? Je vais éditer la question pour être clair ... Merci :). – ale

+0

Le [man] (http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_once.html) dit: _Le premier appel à pthread_once() ... appellera le init_routine sans arguments. Les appels ultérieurs de pthread_once() avec la même commande once_control ne doivent pas appeler l'init_routine._ ** Est-il nécessaire de _envelopper le pthread_once() avec un mutex _? ** – user454322

Questions connexes