マルチスレッドは私をはるかに超えています。特定のコードを求めるのではなく、問題の論理構造について教えてください。
ウェイターが 2 人しかいないレストランがあります。ウェイターは顧客からの注文を即座に受け取ります。つまり、空いている (サービスを提供していない) とすぐに、列の前にいる顧客から注文を受け取り、処理します (サービスを提供します)。これらの注文はランダムに (即時ではなく時間範囲内で) 行われます。顧客は列に並んでおり、その時点でサービスを提供していないウェイターが注文を受けます。
GetInLine()
顧客のジェネレーターと呼ばれる関数がありSleep()
ます。各顧客が行に追加される前に関数を使用するだけです。
TakeOrders()
(おそらく)顧客から注文を受けるという関数があります。ServeCostumer()
問題は、その関数で、即座に顧客にサービスを提供する関数呼び出しが行われていることです。その関数を作成するとSleep()
、スリープして顧客にサービスを提供しますが、もちろんマルチタスク/スレッドが必要な場合は、次のようにする必要があります。
- お客様1が来ました
- ウェイター1が注文しました
- お客様2が来ました
- ウェイター2が注文しました
- 3人来た
- ウェイター 1 が顧客 1 にサービスを提供した
- お客さん4人来ました
- ウェイター 2 が顧客 2 にサービスを提供しました
主にお願いしたいのは、これをコードレベルで視覚化するのを手伝ってもらえますか? つまり
takeorders...ここでロック
ここで
ロック解除
これとあれなどと呼んで
ください。
そんな感じ。