Je tente d'envoyer un signal à un thread spécifique avec pthread_kill
. J'utilise pthread_from_mach_thread_np()
pour obtenir un handle et ensuite utiliser pthread_kill
pour envoyer le signal.pthread_kill à un thread géré par GCD
Cela a bien fonctionné dans mes autres tests, mais maintenant je vois que lorsque je tente de signaler un thread créé en interne par GCD, je reçois un code de retour de pthread_kill
.
API GCD qui a donné naissance à ce fil:
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{ ... });
Quel est le motif ce qui se passe?
-
Pour ajouter un peu plus d'informations, je ne suis pas tenté de tuer des fils. pthread_kill()
est l'API POSIX standard pour envoyer des signaux aux threads. Si un gestionnaire de signal est installé, le contexte du thread est commuté avec un trampoline au gestionnaire.
Alors que ce que j'essaie d'obtenir en utilisant mon gestionnaire de signal peut être atteint de meilleure façon, cela n'est pas en cause ici. Même si pour des raisons purement académiques, je voudrais comprendre ce qui se passe ici en interne.
45 = 'ENOTSUP', c'est-à-dire" Opération non prise en charge " – Rob
@Rob Oui, j'ai vu cela dans l'en-tête. Mais la question est pourquoi; comment ces fils sont-ils différents? –
Dans [Compatibilité avec les threads POSIX] (https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingGuide/ThreadMigration/ThreadMigration.html#//apple_ref/doc/uid/TP40008091-CH105-SW18) ils avertissent explicitement que les blocs "ne doivent pas appeler" "pthread_kill". – Rob