SIGSEGVでプロセスID、スレッドID、バックトレースなどの情報を収集し、この情報をファイル/パイプ/ソケットに書き込むハンドラーを実装しようとしています。
問題は、1つのスレッドがSIGSEGVを経験した場合、他のスレッドがすぐに続く可能性がある(おそらくかなり高い)可能性があることにあります。2つのスレッドがたまたまレポートを書き出すコードに到達した場合、それらは(同じファイルへの)書き込みをインターリーブします。
私は、ここsignal(7)
で少なくとも2つのケースを見て、他の人がこの問題を回避するために使用したトップアンサーにリンクされたビデオも見たように、非同期信号セーフ機能のみを使用する必要があることを知っています。pthread_spin_trylock
これは上記の問題を防ぐための安全な方法ですか?