ここに問題があります。各プロセスは異なる状態にある可能性があり、さまざまなイベントによってプロセスが 1 つの状態から別の状態に移行します。これは、状態図を使用して表すことができます。状態図を使用して、サスペンド キュー セマフォの実装方法を説明します。【10点】
私の図は正しいですか、それとも質問を誤解していますか? http://i.imgur.com/dC5RG6o.jpg
サスペンド キュー セマフォは、現在のプロセスがクリティカル セクションを終了したときにブロックを解除するプロセスを (おそらくランダムに) 選択するブロックされたプロセスのリストを保持していると理解しています。したがって、状態図の待機状態です。
pending_queue_semaphore の疑似コード。
struct suspended_queue_semaphore
{
int count;
queueType queue;
};
void up(suspended_queue_semaphore s)
{
if (s.count == 0)
{
/* place this process in s.queue /*
/* block this process */
}
else
{
s.count = s.count - 1;
}
}
void down(suspended_queue_semaphore s)
{
if (s.queue is not empty)
{
/* remove a process from s.queue using FIFO */
/* unblock the process */
}
else
{
s.count = s.count + 1;
}
}