我正在研究一个问题,我应该实现一个餐饮哲学家范例的例子。 注意:这是家庭作业,在有人要求之前。
我不是要求解决方案。我很困惑,因为我的老师在下面提供的这个Philosopher
函数理论上应该起作用。 wait
和signal
是C中用于OS系统调用的函数。
我使用了以下内容:
/* Wait and Signal */
#include <signal.h>
#include <sys/wait.h>
struct semaphore
{
int count = 1;
struct PCB *Sem_Queue ;
};
struct semaphore Forks[5];
Philosopher()
{
i = getPID() ;
while (1)
{
think ();
wait (Forks[i]);
wait (Forks[(i+1) % 5]);
eat ();
signal (Forks[i]);
signal (Forks[(i + 1) % 5]);
}
}
然而,编译时我收到错误:
Main.c:38:19: error: too few arguments to function call, expected 2, have 1
signal (Forks[i]);
答案 0 :(得分:0)
wait()
调用的signal()
和Philosopher()
函数似乎与think()
和eat()
函数一样 - 打算由您提供(或者包含在Philosopher()
中。
不要包括signal.h
或sys/wait.h
。相反,通过头文件或其他方式为这些名称的函数提供声明,并确保您的实现链接到可执行文件中。