2011-07-20 9 views
0

私は、C++の分散システムでmutexのように動作する単純なロック/アンロックアルゴリズムを記述しようとしています。分散ミューテックスライブラリを作成するにはスレッドを作成する必要がありますか?

これはライブラリとして実装され、ユーザーはインターフェイスファイルを使用してそのライブラリを使用できます。

3つのプロセス{A、B、C}があるとします。

各プロセッサは、他のプロセスのアドレスとポートなどを知っています。

Aがオブジェクトをロックしたい場合、他のプロセスから許可を得ています。この場合はBCです。

私はBからの返信を送信して待っていると信じています。ユーザーは間違いなく関数を呼び出すため、Cは問題にはなりません。

しかし、BCはどのようにメッセージを受け取るべきですか?

すべてのプロセスが動作することが保証されています。

各プロセッサがソケットをリッスン(ポーリング)している別のスレッドが必要ですか?

コンストラクタでスレッドを作成し、プロセスが実行されている間にそのスレッドを使用して、デストラクタで破棄しても問題ありませんか?

答えて

1

ソケットをリッスンする(ポーリングする)プロセッサごとに別のスレッドが必要ですか?

エクササイズとして最初から作成する場合を除き、Inter-Process Communicationのライブラリを使用する必要があります。あなたが何かを自分で構築したいのであれば、そのウィキペディアの記事やオペレーティングシステムに関する書籍(TanenbaumやSilberschatzなど)の章を読んでください。

分散システムでの相互排除の具体的な問題については、Maekawa's Algorithmを参照してください。

それは私がコンストラクタでスレッドを作成する場合を意味し、プロセスが実行され、そしてデストラクタでそれを破壊する うまくなりながら それを使用していますか?

このように実装する予定の場合は、どうしたらよいですか。分散システムでは、多くの場合、層別アプローチを使用します(例えばErlangチュートリアルの http://www.erlang.org/course/error_handling.htmlを参照)。レイヤーは基本的に、共通の目標に向かって共同して動作する、相互通信および相互依存のプロセスの集合です。これらのプロセスの1つは、下位層への接続として機能し、別のプロセスは上位層への接続として機能できます。プロセスの作成時に作成され、プロセスを破棄するときに破棄されるスレッドを使用して、1つのオペレーティングシステムプロセスで完全なレイヤーを実装できます。それはあなたが達成したいこととあなたが取る道に依存します。

関連する問題