0

まず、これが私の質問の正しい場所でない場合は、ご容赦ください。

私は試験のために勉強しています。これは与えられたサンプルの質問です:

以前の試験で出題された問題:

生徒たちは会って映画を見に行くことにしました。生徒たちは会って映画を見に行くことにしました。会って映画を見に行くことにしました。group_size のグループに集まった後、チケットを買いに行きます。各学生の学生は自分のチケットを購入します(顧客になります)。チケット売り場は2カ所(各ブースに1名ずつ)。店員が空いている場合は、オンラインで次の顧客にサービスを提供します (一度に 1 人の顧客)。どちらのブースも1列のみです。

セマフォとセマフォに対する操作を使用して、Student と Clerk の 2 つのスレッド タイプを同期します。numStundents (デフォルト 9) と numClerks (デフォルト 2) があります。早朝にブースに列を作っている顧客がいないことを考慮してください。店員の観点から (それはあなた次第です)、両方の店員がすでに出勤しているか、どちらもまだ到着していない (最初の顧客が現れたとき) と見なすことができます。numStudents よりも多くの顧客がいます。使用される各セマフォのタイプと初期値を示し、その使用法を簡単に説明してください。ブール変数の使用をセマフォで置き換えることができる場合は、ブール変数を使用しないでください。同期のほぼ前に、スレッドの可能な実行疑似コードは次のようになります。

   Student ( ) { 
    arrive to meeting place // napping
    group together
    go buy ticket

    buy ticket //napping 
    watch movie // napping 
   } 

   Clerk ( ) {
    get to workplace // napping
    while(true) {
     serve customer // if ∃ a customer
    }
   }

誰かがこの質問を解決するのを手伝ってくれたら、本当に感謝しています。

4

1 に答える 1

0

実際のコードを提供しても役に立たないので、いくつかのヒントを次に示します。

  • 待機中の学生のキューを維持する必要があります。これは、店員が学生を受け入れることを決定するたびにロックする必要があり、店員が学生へのチケットの販売を終了すると解放されます。

  • セマフォが = 0 のときに、wait() を使用して店員と学生を「スリープ モード」にする必要があります。

  • デッドロックに達する可能性があるシナリオについて考えてみてください (店員がロックを決して解放しない/セマフォの減分など)。

于 2015-08-06T01:04:29.513 に答える