2017-05-12 19 views
0

共有ライブラリ(libshared.so)にグローバル変数があります。ライブラリに複数のプロセスがアクセスしています。図書館。 私が直面している問題は、グローバル変数(共有ライブラリに存在する)をあるプロセスで更新することが、他の独立プロセスがアクセスする変数に反映されないことです。複数のプロセスで使用されている共有ライブラリのグローバル変数を更新する

私はこの問題に関してウェブを検索しましたが、これを修正する適切な方法がありませんでした。また、テキスト/コードセグメントのみが共有され、各プロセスはデータセグメントのローカルコピーを取得することになりました。

この要件を実装するためのソリューションを提案してください。共有ライブラリのグローバル変数を更新します。

環境:-Linux、ARM

おかげ アミット・クマール

答えて

1

複数のプロセスが同じ共有ライブラリを使用する場合、彼らはマップされた同じコードセグメントを得るが、各プロセスは、書き込み可能なデータセグメントの独自のコピーを取得します。したがって、ここでの「グローバル」とは、1つのプロセスとそのアドレス空間のコンテキスト内でグローバルのみを意味します。

考えてみましょう。他の実装では、desasterを呼び出すことになります。標準Cライブラリのerrnoは "グローバル"であり、ここでランダムな他のプロセスによって生成されたエラーを読んではいけません。

これはあなた自身のライブラリで、実際にプロセス間でデータを共有する必要がある場合は、共有メモリ(Linuxのshmget()など)を見てください。

関連する問題