En C ++, puis-je utiliser des outils de multithreading pour synchroniser les signaux UNIX avec mon programme principal?

Un gestionnaire de signaux défini avec sigaction exécuté dans son propre thread? Puis-je utiliser les outils Pthreads pour synchroniser mon gestionnaire de signaux avec mon programme principal, comme les mutex Pthreads? Puis-je utiliser les outils C ++ 11 tels que mutex et atomic ?

Désolé si la question est un peu trop générale mais je suis vraiment confus au sujet de la relation entre les signaux et les threads.

Je travaille sous Linux mais la question s’applique à UNIX en général.

Non.

Les seules fonctions que vous pouvez appeler en toute sécurité dans les gestionnaires de signaux sont des fonctions sécurisées par signal asynchrone. Pour Linux, vous pouvez trouver une liste de ces fonctions dans la page de manuel signal.7 , sous “Fonctions sécurisées contre les signaux asynchrones “, à un peu plus de la moitié de la page.

Toute fonction non répertoriée comme async-signal-safe ne peut pas être appelée en toute sécurité dans un gestionnaire de signal.

Notez que la seule fonction de synchronisation répertoriée comme async-signal-safe sous Linux est sem_post() .