pthread_kill
で特定のスレッドに信号を送信しようとしています。私はpthread_from_mach_thread_np()
を使用してハンドルを取得し、pthread_kill
を使用して信号を送信します。pthread_killをGCD管理のスレッドに変更
これは私の他のテストではうまくいきましたが、GCDで内部的に作成されたスレッドに信号を送るときに、pthread_kill
からの戻りコード45が返されます。
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), ^{ ... });
これが起こっている任意の理由:そのスレッドを生み出し
GCDのAPI?
-
さらに詳しい情報を追加するには、スレッドを強制終了しようとしていません。 pthread_kill()
は、シグナルをスレッドに送る標準のPOSIX APIです。シグナルハンドラがインストールされている場合、スレッドのコンテキストは、トランポリンを使用してハンドラに切り替えられます。
シグナルハンドラを使用して達成しようとしていることは、より良い方法で達成できますが、ここでは問題にはなりません。純粋に学術的な理由から、私はここで内部的に何が起こっているのか理解したいと思います。
45 = 'ENOTSUP'、つまり「操作がサポートされていません」 – Rob
@Robはい、ヘッダーに表示されています。しかし、問題はその理由です。それらのスレッドはどう違うのですか? –
[POSIXスレッドとの互換性](https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingGuide/ThreadMigration/ThreadMigration.html#//apple_ref/doc/uid/TP40008091-CH105-SW18 )ブロックは "pthread_kill"を呼び出してはいけないと明示的に警告します。 – Rob