CSI3131 - LAB3


CSI3131 - LAB3の
スレッド同期(Java)の
目的は、
自動車サービスフェリーのシミュレーション作成でJavaセマフォの経験を積むために
救急車を。開始する前に、ラボの文書をよくお読みください。フェリー
2つのポート、ポート0とポート1自動車間のフェリーの提供サービスは、これらの間を移動する
二つのポートだけでなく、救急車(S)。各自動車がポートに到着し、ボードフェリー(それは場合
ポートに到着する)、他のポートに交差フェリーをdisembarks、ビットの周りを移動し、次に
再び交差するバックポートへ進みます。
救急車は次のように機能する車両(自動車、救急車の両方がビヒクルである)であります
例外自動車:救急車ボードフェリー、フェリーはすぐに去る
いっぱいであることを待たずに。
フェリーは、2つのポート(0と1)の間を移動する:それはポートに到着すると、ボード上の車両は
、まず任意の待機車両基板を上陸します。フェリーがいっぱいである、または救急車のボードと、それは
他のポートのために残します。

代写CSI3131作业、代写のJava编程语言作业は、
クラスFerryAppはでフェリーと全ての自動車を作成するコンソールアプリケーションです- :次のように提供されているJavaコードLab4.javaは、5つのクラスが含まれている
シミュレーション
-クラス自動単一の自動車のスレッドをシミュレート
-クラス救急車は、単一の救急車のスレッドをシミュレート
-クラスフェリーはフェリースレッドシミュレート
フェリーの正しい動作をアサートするために使用されるインタフェースロガー-
シミュレーションをコンパイルして実行するには: - javacの* .javaファイル
- FerryApp -ea javaのFerryApp、またはJava
Oを(EAまたは有効アサーションはこれで、フェリーの適切な動作をアサートするために使用され
、エラーが検出されたときに例外を生成するアプリケーションを有効にするフラグ。これを使用します
)ソリューションが正常に動作を確認するためにラボを提出する前にフラグ
次のように、さらなる分析のためにファイルにパイプ出力すること(Linuxのみ?!): - JavaのFerryApp | tmp.txtティー
注意
シミュレーションを実行したときに通知があり、スレッドによる違反がたくさんあることを行っている
同期エラーを!あなたの仕事は、適切なスレッド同期はすべて従うように構築追加することです
フェリーシミュレーションのルールを、結果としてエラーを持っていません。
あなたのシミュレーションは、以下のルールを満たしている必要があります。
フェリーの1.最大容量は5台です。ポート「P」のボードフェリーで2.A車の場合
フェリーは、同じポートp、である
B。ボード上のフェリーで到着したすべての車両は、すべてのフェリーを降りてきて、
C。まだ車のフェリーの余地が存在します。
ポートで3.A車?P?待たなければなりません
フェリーは、同じポートでない場合には?P?、
B。車両はフェリーから下船している
C。フェリーがいっぱいで、残して準備ができています。
救急車のボードフェリー4.If、フェリーはすぐに去ります。
フェリー5.If他の自動車が到着することが待ち、完全かつ基板には救急車ではありません。
6.A車両は次のポートでの到着時にのみ降りることができます。
上記のルールは、コードでチェックされ、あなたがあるとして、すべてのチェックを残しておく必要があります。チェックがされようとしている
ソリューションを検証するために使用されます。
あなたの仕事
あなたの仕事は、セマフォ構造を追加することにより、オート、救急車、フェリーのクラスを変更することです
フェリーシミュレーションがエラーなしですべてのフェリーのルールを通過するようになりますフェリークラス。
ガイドライン
は、次のガイドラインを使用することができます-シングルフェリーオブジェクトは、他のすべてのスレッドに表示されているので、すべて保持するための理想的な候補である
シミュレーションに必要なセマフォを
- addLoad、reduceLoad、loadAmbulance、unloadAmbulance方法は、相互にする必要があります
排他的。あなたはそのための固有ロックを使用することができます-本質的なロックについての講義のスライドを参照してください
-フェリーがする車を待つ2つのセマフォ、すなわちloadingDone、unloadingDoneを、必要と
交差を開始する前にロードされ、その後、許可する前にアンロードする車を待っている
車を負荷へ
-車(自動車、救急車)は、各ポート上のloadingSemaphoreとunloadingSemaphore必要が
各ポート上の車のロード/アンロードを同期させるために(2それぞれのすなわち配列)を
させるために、次のコードスニップ-それを使用する、あなたはInterruptedExceptionあるのハンドルを提供する場合-
アプリケーションが正常に終了:
{しようと
///////ここにコード//////
キャッチ(InterruptedExceptionあるすなわち){}
にThread.currentThread()(中断);。
System.out.println(「中断によって終了スレッド」);
//割り込みハンドル
リターンを。
}
状況は次のようになりPORT0フェリーにドッキングされた場合:
最初のフェリーは、ポート0の負荷を知らせる、次いで交差を行う、行わローディングを待つと
行わアンロード待ちが続く、ポート1上の荷降ろしを知らせます。これは、のいずれかのループ終了
フェリー交差を。
一方、両側の車両がそのポートにロードするために待って、その後にアンロードするのを待つ
フェリーの交差点を完了した後、反対側のポート。救急車との違い
自動救急車が排出することによって確かに他の自動車がそれの後に搭乗することが許されないなることです
許可を、それを入力した後、ローディングセマフォの(JavaのセマフォdrainPermitsを参照してください)。
何が残っていることことができるloadingDone、及びunloadingDoneセマフォ、シグナリングするイベントであり、
容易にaddLoad、reduceLoad、loadAmbulance、unloadAmbulance方法で検出
フェリー。
フェリーは、ポート1にドッキングされたときの状況は以下のようになります。
提出は注意してください
あなたのコードがフルマークを取得するためにコンパイル&実行する必要があります。私たちは、(多くの他のシナリオを使用するつもり
あなたのソリューションを検証するために踏切、自動車、救急車を)。バグ無料のソリューションは、あらゆるシナリオをサポートします。

プロ、とても信頼できるので。必要であれば、追加してください QQを 99515681 またはEメール:[email protected] 

マイクロ手紙: codehelp

おすすめ

転載: www.cnblogs.com/linta/p/11084999.html