0

まったく維持されていなかった古いプロジェクトのビルドに取り組んでいます。それは多かれ少なかれ、一緒に石畳になっている何百もの独立したプロジェクトの寄せ集めです。当然、それは多くの不適切なことが起こっていることを意味します。

おそらく50〜100の実行可能ファイルと、約300の共有/静的ライブラリがあります。一部のライブラリは-mtフラグを使用して構築されています(sun studio; -pthreadsはgccと同等のようです)が、そうでないものもあります。

これは私には潜在的に問題があるようです。私が持っていてlibA.solibB.so-Aが-mtで構築されたが、 Bでは構築されなかったとします。ABに対してリンクされているアプリケーションがシングルスレッドであれば、問題はないと思います(問題はありません)。ただし、アプリがスレッド化されている場合、この状況はワームの楽しい缶を開きます。

私は-mtを使ってすべてを構築する傾向があり、それを使って完了しました。ほとんどのオフィスはこの計画に同意していますが、反対者が1人います。私の期待は、これによってパフォーマンスが低下する可能性があることですが、現時点では、このプロジェクトの状態が悪いため、パフォーマンスはすでにひどいものになっています。だから私はそれについて心配していません。

要するに:これを行うことで潜在的な落とし穴はありますか?

4

1 に答える 1

2

スレッドでコンパイルされることを積極的に#ifdef _REENTRANTにしているライブラリには問題があると思います(はその兆候です)。長い間コンパイルされていないコードが突然アクティブになると、その問題が明らかになることがあります。(それはスレッド化についてではなく、長い間 ifdefed されていたすべてのコードについてです)。

上記の特殊なケースは、ここpthread_atforkの RATIONALEセクションで説明されている方法で使用しようとするライブラリです。スレッドの作成、ロックの解放などは非同期信号ではないため、これらのことは明確に定義された、posixly とは言えません。安全。プラットフォームは、実際に何が起こるかについていくつかの保証を提供する場合があります (たとえば、シグナル ハンドラーでの発生に対して atfork ハンドラーが呼び出されるかどうかを指定する場合もあります)。これは、実際に使用されていない場合は問題になりませんが、そうでない場合は、誤動作する可能性が高くなります。forkfork

要約: スレッド化を気にしないライブラリーから多くの問題が発生することは期待しないでください。にかけ、(おそらく、場合によっては)間違ったことをしているライブラリからそれらを期待してください。

于 2013-01-30T22:43:25.133 に答える