2017-12-15 13 views
2

Adaプログラミング言語では、ランデブーはプロセス間同期/メッセージ・パッシングの方法です。どのようにしてこのメ​​カニズムをjavaで実装するのですか(タスクの中断と選択待ちと一緒に)?私はjavaのリモートメソッド呼び出しとExchangerクラスを見ていましたが、まだ適切な解決策を見つけるつもりはありません。 ADAしかしあなたはおそらくSynchronousQueueBlockingQueue実装の1つを探している可能性があり示唆ADAのランデブーに簡単にGoogleに精通していないJavaのAdaランデブー対応者

+1

Javaの並行処理機能が低レベル(エラーが発生しやすい)であることを考慮すると、それらを使用するAdaの高度な並行処理機能と同等の機能を実装できるはずです。問題は、あなたのプロジェクトがあなたにそれを費やすのにどれくらいの労力がかかるかということです。ランデブーセマンティクスが本当に必要な場合は、AdaとJavaで目的の動作を実装して予算管理者に提示するのにかかる時間を見積もってください。 –

答えて

2

おそらく、メッセージが渡されたときに何が起こりたいのかを説明すると、もっと役立つかもしれません。

+0

私はSynchronousQueueと一緒に行くことにしました。基本的に私は、車を産んで走らせることができる8字形トラックを実装する課題を持っていました。私は彼らが交差点で墜落しないようにしなければならなかった。車のスレッドは、プロセスを追跡して前方に進むことができるかどうかを尋ねる呼び出しを行い、2台の車が交差点に到着した場合、交差点が空であればランダムなものが通過することができます。 – kbijoch

+0

@kbijoch - 喜んでお手伝いしますが、あなたの説明は[Semaphore](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html)をもっと探しているように聞こえます。 )または[CountDownLatch](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html)ですが、 'SynchronousQueue'がうまくいく場合は、それを行ってください。 – OldCurmudgeon

+0

ええ、私は知っていますが、私の教授は私たちにAdaのランデブーを具体的に実行するように指示しました。私はモチベーションがこのように振る舞っているのか分からないが、彼は私の解決策は大丈夫だと言った。 – kbijoch

4

Javaで実装するのが最も難しい部分は、選択的な待機とエントリのキューイングです。ブロッキングキューは、Adaの保護されたエントリの概略的なシミュレーションであり、選択的な待機はありません。

JavaのAda selectステートメントに相当するものはないと思います。また、プログラマが選択可能なキューイングポリシーを持つエントリキューに同等の機能を提供する方法もありません。 Javaのwait/notifyの組み合わせは、待機中のスレッドをアクティブにしますが、どのスレッドかを知ることはできません。 notifyコマンドによって実際に起動されるスレッドは、競合状態に基づいており、明らかにランダムであるという効果があります。解析では、待機中のスレッドはすべて、であると予想され、プログラム実行中のある時点で通知によってアクティブ化されると予想されますが、Javaではスレッドの起動順序が保証されていません。状態。