C`signal`的论点太少了

时间:2016-12-07 15:05:42

标签: c signals wait semaphore dining-philosopher

我正在研究一个问题,我应该实现一个餐饮哲学家范例的例子。 注意:这是家庭作业,在有人要求之前。

我不是要求解决方案。我很困惑,因为我的老师在下面提供的这个Philosopher函数理论上应该起作用。 waitsignal是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]);

1 个答案:

答案 0 :(得分:0)

wait()调用的signal()Philosopher()函数似乎与think()eat()函数一样 - 打算由您提供(或者包含在Philosopher()中。

这两个POSIX函数之间的名称冲突是令人遗憾和困惑的,但没有意义。

不要包括signal.hsys/wait.h。相反,通过头文件或其他方式为这些名称的函数提供声明,并确保您的实现链接到可执行文件中。