CERT.POS.THREAD.ASYNC_CANCEL

非同期的に取り消される可能性があるスレッドを使用しないでください。

脆弱性とリスク

スレッド化では、pthreads は即座に取り消すように設定することも、特定の取り消しポイントまで保留するように設定することもできます。しかし、(即座に) 非同期的に取り消すのは危険です。ほとんどのスレッドの場合、即座の取り消しは実際上安全ではないためです。たとえば、非同期的に取り消すとロックやミューテックスが解除されない可能性があります。

軽減と防止

pthread_setcanceltype() に PTHREAD_CANCEL_ASYNCHRONOUS を渡さないでください。スレッドを停止しても問題がないときに、スレッドで pthread_testcancel() を使用し、取り消しのテストを行ってください。

コピー
if ((result = pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,&i)) != 0) {
    /* エラーを処理します */
  }

1 行目で違反が報告されます。