【发布时间】:2017-04-22 14:19:08
【问题描述】:
我正在解决一个问题,我应该在其中实现一个哲学家就餐范式的示例。 注意:是的,这是一个家庭作业,在任何人问之前。
不过,我并不是在寻求解决方案。我很困惑,因为我的老师在下面提供的这个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]);
【问题讨论】:
-
哲学家需要用返回数据类型正确声明
-
您是否尝试过阅读您尝试使用的功能的手册?它在大多数情况下都有帮助。
-
我尝试在函数中添加
void类型,但仍然出现相同的错误。 -
@EugeneSh。你能给我指出手册的正确方向吗?
-
显然信号需要 2 个参数,而你只提供一个
标签: c signals wait semaphore dining-philosopher