1


0

このコードにリンクしているすべての人の間で単一の「神」のインスタンスを共有して、共有オブジェクトに配置することは可能ですか?

god * _god = NULL。 extern "C" {

int set_log_level(int level){if(_god == NULL)の場合は-1を返します。 _stb-> log_level(レベル); 0を返します。 }

int god_init(){if(_god == NULL){_god = new god();} //魔法はここで起こります}}

}

すべての関数の始めにロック同期を実行し、神自身が他のものを新規作成またはmallocできるが、それらのものが呼び出し元に戻されることはない(神はmallocを内部使用のみ)ことを考える。可能であれば、これを行う方法。

どうやってそれをこの共有ライブラリにリンクされた任意の数のプログラムに拡張することができますか?

3 Answer


2


http://www.boost.org/doc/libs/1_37_0/doc/html/interprocess.html[Boost Interprocess]ライブラリには、高い(er)レベルの移植可能な共有メモリオブジェクトがあります。


1


これはまったく正しい方法ではありません。 あなたが提案することをすることによって、変数、はい、ライブラリ、そしてプログラムにとってグローバルになりますが、データは実際の実行中のプロセスにプライベートです。 実行中のプログラム間で値を共有することはできません。 @grieveは複数のスレッドによってアクセスされるグローバルを参照していますが、スレッドは同じ親プロセスインスタンスを共有します。

実際のプロセスでは、OS固有の共有メモリ機能を利用する必要があります。 詳しくは Shared Memoryをご覧ください。 それは実行可能な問題ですが、それがやってくるのは特に簡単なことではありません。 使い方を調整するためには、セマフォのようなプロセス間同期システムも必要です。


0


私は_god_がある種のサーバーになると感じています。 神を大衆から遠ざけるために、適切なクライアント/サーバーアーキテクチャを使用することを検討してください。