1

A、B という 2 つのスレッドがあるとします。スレッド A は、ロードされた共有ライブラリを同時に検索するいくつかの命令を実行し、スレッド Bdlclose()は共有ライブラリを検索します。何が起こるか?

4

1 に答える 1

0

同じプロセスで、2 つのスレッドがdlopen()の呼び出しに続いて同じハンドルを共有している場合、一方のスレッドがdlclose(handle)で開いているライブラリを閉じると、他方のスレッド (実際には 2 つのいずれか) がハンドルを使用すると、未定義の動作が発生します。 (通常、セグメンテーション違反)。

より具体的には、dlclose man ページから

dlclose()

関数 dlclose() は、ダイナミック ライブラリ ハンドル handle の参照カウントをデクリメントします。参照カウントがゼロになり、他のロード済みライブラリがシンボルを使用していない場合、動的ライブラリはアンロードされます。

于 2013-05-31T03:15:29.537 に答える