1

各インスタンスが独自のメモリを持つように、ライブラリを独立したスコープに複数回動的にロードしたいと考えています。それは可能ですか?

ポータブルな方法ではないと思います。dlopenPOSIX/Unix/Linux の友達と一緒にできますか? または、少なくとも私は今、特定のケースで MacOSX を気にかけています (そのため、後で他のシステムでも必要になる可能性があります)。


背景: 私が使用したいライブラリは、マルチスレッド セーフになるように設計されていません。ただし、各スレッドがライブラリの独立したインスタンスを使用するだけであれば、問題なく動作するはずです。

詳細な背景: readlinelib です。そこにマルチスレッドのサポートを追加すると、基本的にすべてを書き直すことになります。

4

1 に答える 1

1

各インスタンスが独自のメモリを持つようにします。

「独自のメモリ」の意味によって異なります。明らかに、POSIX スレッドではすべてのメモリが共有されるため、ライブラリのインスタンスは「独自のメモリ」を持つことはできません。

おそらくあなたが意味したのは、「各インスタンスがグローバル変数の独自のコピーを持つようにする」ことであり、答えはイエスです: dlmopen(3) docsを参照してください。あなたはそれに合格LM_ID_NEWLMしたいと思うでしょう。

注意: これは Linux と Solaris のみであり、GDB はデフォルト以外のリンカ空間にロードされたライブラリについて何も知らないため、問題のデバッグは現在非常に困難です。

于 2011-09-03T16:28:31.187 に答える