1

C++ で、pthread_join() の呼び出しで簡単に再現できないエラー状態が発生しました。何らかのシグナルが生成されました。どのシグナルかはわかりませんが、シグナル ハンドラーが呼び出され、何らかの理由で通常のデバッグ情報が出力されませんでした。生成された信号について。次のようなスタック トレースを取得しました。

# 2 /lib/tls/libpthread.so.0: pthread_join(...) +0x1c [0xce439c]

pthread_join() の man ページを確認しましたが、シグナルについての言及はありませんでした。

生成された信号とその原因は何ですか? これはある種の競合状態である可能性があります。

4

1 に答える 1

2

http://linux.die.net/man/7/pthreads

Signals are used in implementation internally

http://osr600doc.sco.com/man/html.PTHREAD/pthread_join.PTHREAD.html

The wait in pthread_join is not broken by a signal.
If a thread waiting in pthread_join receives a signal that is not masked,
it will execute the signal handler, and then return to waiting in pthread_join.
Note that this behavior differs from that of pthread_cond_wait.

http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Fapis%2Fusers_25.htm

Threadsafe: Yes
Signal Safe: No

基本的に、pthread_join()が何らかのエラーまたは外部イベントのために、他のシグナルを受け入れるという事実を経験している可能性があります。

信号の正確な原因を推測することはできません。

PS正確な環境が指定されていないため、決定がさらに困難になります。

于 2012-04-30T07:59:20.610 に答える