4

マルチスレッド アプリケーションでは、スレッドをキャンセルする必要があります。flockfile それらのいくつかは、 の有効なキャンセル ポイントではないように見えるメカニズムを使用していpthread_cancelます。SIGUSR1を使用してシグナルを送信し、シグナルハンドラーでpthread_kill強制的にスレッドを強制終了することで、なんとかスレッドを強制終了しました。pthread_exit私の場合、割り当てられたメモリのクリーンアップは簡単であることがわかりました (すべてスタック上にあります) が、もちろん、ファイル ストリームを閉じることはできません。バッファを解放したり、ロックを解除したりする方法はありますか? 私のシステムでは、閉じられていないバッファのそれぞれが 16KB のメモリを占有し、すぐに蓄積されます。

4

1 に答える 1

2

スレッドを強制終了する代わりに、スレッドに「終了」メッセージを伝える必要があります。その後、スレッドは、クリーンを終了する前にクリーンアップできます。

すでに SIGUSR1 でメッセージの部分を行っているので、シグナル ハンドラから使用中のハンドルをロック解除/解放できるように、開いているハンドルを追跡する必要があります。

于 2012-04-30T12:32:38.450 に答える