Comment mettre en œuvre un "thread-safe" timer sur linux?

Comme nous le savons, faire les choses dans les gestionnaires de signaux est vraiment mauvais, parce qu'ils s'exécutent dans une interruption comme contexte. C'est tout à fait possible que les différentes écluses (y compris la fonction malloc() verrou de segment!) la tenue de la gestionnaire de signal est appelé.

Je tiens donc à mettre en œuvre un "thread-safe" timer sans l'aide du signal mécanisme.

Comment puis-je faire?

Désolé, en fait, je ne suis pas attendre de réponses au sujet de thread-safe, mais des réponses au sujet de la mise en œuvre d'une minuterie sur Unix ou Linux, qui est thread-safe.

Vous avez une confusion entre le code réentrant, nécessaire pour gérer les OS jmp-ing pour le fil conducteur DE LA 1 & SEUL FIL, et ensuite revenir à la très prochaine instruction dans ce thread, et une POSIX minuteur qui indique à l'aide d'un système d'exploitation générés par thread. Le plus tard est assez inutile, parce que vous ne savez pas où dans votre thread principal de l'OS informera spontanément par la génération d'un nouveau fil pour le signal. Ainsi, vous ne pouvez pas verrouiller et déverrouiller les exclusions mutuelles requises pour protéger les ressources partagées. Utiliser des signaux. Les Threads ne fonctionne que si le principal ne fait rien mais attendre sur le fil. C'est à dire: recrée sleep();

OriginalL'auteur dragonfly | 2009-03-23