【发布时间】:2013-05-08 04:39:23
【问题描述】:
这是一个问题: 每个进程可能处于不同的状态,不同的事件导致进程从一种状态转移到另一种状态;这可以使用状态图来表示。使用状态图来解释如何实现挂起队列信号量。 [10分]
我的图表是正确的,还是我误解了这个问题? http://i.imgur.com/dC5RG6o.jpg
据我了解,挂起队列信号量维护一个阻塞进程列表,当当前进程完成其临界区时,从该列表中(可能是随机地)选择一个要解除阻塞的进程。因此状态图中的等待状态。
suspended_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;
}
}
【问题讨论】:
标签: semaphore