0

最初にスレッドを作成するプログラムを開発しました。そして、pthread_cancel()スレッドの実行中にスレッドを強制終了したいと思います。

しかし、これを行うとクラッシュします。このクラッシュは常に再現されるわけではありません。しばらくの間、プログラムはクラッシュを回避します。

pthread_cancel()キャンセルされたスレッドがシステム コールを実行している場合、クラッシュを引き起こす可能性のある場所がいくつか見られます。それは真実ですか?

dmesg は次のエラーを示します

myprogramd[1965]: segfault at c ip b76cdef3 sp bfcd5780 error 4 in libpthread-0.9.30.1.so[b76c6000+a000]
4

3 に答える 3

0

使用しないでくださいpthread_cancel()。コードをリファクタリングして、閉じるようにというメッセージを受け取り、共有メモリに影響を与えて物事を不安定にしないようにします。

于 2012-11-08T16:10:32.510 に答える
0

クラッシュはマネージャー スレッドに関連しています。最初の起動ではマネージャ スレッドが適切に強制終了されないため、2 回目の起動で新しい pthread を作成するときに、古いスレッド マネージャがクラッシュを引き起こします。

詳細については、次の質問を参照してください

Cで管理スレッドを強制終了するには?

于 2012-11-11T18:23:16.353 に答える
0

同期の問題だと思います。つまり、終了しているスレッドに依存する別のスレッドにあるということです。無効な何かにアクセスしてクラッシュを引き起こしている可能性があります。実行するコード全体がない限り、クラッシュを指摘することはできません。

少なくともgdbでコードを実行して、 backtrace取得してみてください。ここを見て

于 2012-11-08T15:51:42.577 に答える