スレッドセーフな方法で直ちに終了したいマルチスレッドC++ 03アプリケーション(Linuxベース)があります。スレッドセーフな方法でC++ 03でプログラムを終了するには?
私はexit(0)を使用しようとしましたが、これは他のスレッドが積極的に使用しているいくつかの静的変数を破壊し、解放されたメモリと破壊されたオブジェクトにアクセスし、明らかにexit()関数はデータ競合があります。「この関数を呼び出すと、静的持続時間を持つすべてのオブジェクトが破棄されます。複数のスレッドが実行されているプログラムでは、終了を呼び出せません(静的オブジェクトに影響しない同様の関数についてはquick_exitを参照してください)。
C++ 11はスレッドセーフのquick_exit()関数を提供します。しかし、私はこの大規模なアプリケーションを現時点でC++ 11に移行する能力はありません。
また、スレッドのクリーンターミネーション/ジョインをしようと努力したくありません。これは非常に複雑なプログラムであり、かなりの労力を要します。
他の選択肢はありますか?私はちょうどすぐに、クリーンアップ、コアダンプを終了するプログラムを終了します。
編集:私が実際にやっていることは、コアダンプを作成しないものでabort()呼び出しを置き換えることです。そして、abort()はスレッドセーフで、btwです。
つまり、ショートカット(適切なシャットダウンロジックはありません)を受け取り、後悔しました。 – BitTickler
恐らく 'kill(getpid()、SIGKILL);'? :) –
サイドノート:多くの場合、シャットダウンコードの作成を避けるようです。彼らは時間を節約すると思っています。しかし、あなたはどのようにしてプログラムにvalgrindのようなツールを動かすのですか? – BitTickler