2011-02-10 11 views
0

ベクトルクロックテストプログラムの開始スレッド数を正常に開始しました。次の問題は、スレッド間通信のようです。スレッドが読み込んだ設定ファイルには、IPアドレス(localhost)とポートの組み合わせのリストがあり、指定されたポートでリスンを開始すると同時に、入力ファイルを読み込み、論理クロックを増やすか特定の他のスレッドにメッセージを送信することができます。ブロックメソッドを使用しないソケットとのスレッド間通信

初めてスレッドごとにServerSocketsを作成した場合、accept()メソッドは、ソケットを介してこのスレッドに接続しようとするまで、明らかにブロックされ、入力中に指示された可能性のある他のアクションは実行できませんfile( "int sendMessageTo int"または "int incrementClock k"という形式の行しか持たない - 数値はホスト&のポートリストを含む設定ファイルの行を表します)

答えて

0

Linuxの場合、acceptの代わりにaccept4を使用し、flagsパラメータとしてSOCK_NONBLOCKを渡すことができます。

POSIX.1-2001、SVr4、4.4BSD準拠のシステムではをfcntlに設定することができます。

+0

私はJavaを使用していると言いました。私はSocketChannelsとSelectorsに精通していましたが、スレッドのポートを聞くことができると同時に、このスレッドに接続が必要ない場合、別のスレッドにメッセージを送信するなど、他の処理を行うことはできません。 Selectorを使用すると、select()が再度ブロックされるようです。以下は私のニーズを明確にするかもしれません: ポートを聞くportNumber;接続が要求されていない場合は、引き続き入力ファイルの読み取りと処理を行いますが、今後も着信接続要求を処理する準備はできています。 – treiman

関連する問題