Je suis dans une situation où je dois lire un arbre de recherche binaire (BST) dans un gestionnaire de signal (SIGSEGV gestionnaire de signal, qui selon mes connaissances est par base de threads). Le BST peut être modifié par les autres threads de l'application.Lire des données partagées dans un gestionnaire de signal
Maintenant, comme un gestionnaire de signal ne peut pas utiliser des sémaphores, des mutex, etc. et ne peut donc pas accéder aux données partagées, Comment puis-je résoudre ce problème? Notez que mon application est multithread et fonctionne sur un système multicœur.
J'essaierais vraiment, vraiment fort, de penser à un moyen de ne pas lire les données partagées dans ce gestionnaire de signal. – dbeer
Pour souligner le point de @dbeer, dans un gestionnaire de signal, vous ne devriez généralement pas faire quoi que ce soit qui bloque ou soulève d'autres signaux, ou de longues opérations. Un gestionnaire de signal doit être petit, rapide et court. –
Peut-être qu'il me manque quelque chose, mais si seulement les threads de votre programme accèdent à la mémoire partagée (pas d'autres interruptions et exceptions), pourquoi ne pas utiliser un sémaphore (si le bon style est une question différente)? Si un thread accède à la région critique, la bloque, est mis en sommeil par un autre thread, le sémaphore est toujours verrouillé pour l'autre thread, et votre thread initial sera éventuellement programmé pour y accéder à nouveau. Pour des raisons de performances, je ne vois ni danger de corruption de données ni blocage du système. – gnometorule