2016-12-07 49 views
1

我正在研究一个问题,我应该实现一个哲学家哲学范式的例子。 注意:是的,这是一个家庭作业,在任何人问之前。C`signal`的参数太少

虽然我不是要求解决方案。我很困惑,因为我的老师在下面提供的这个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]); 
+0

哲学家需要用返回数据类型正确声明 –

+0

您是否尝试阅读正在尝试使用的函数的手册?它在这样的大多数情况下都有帮助。 –

+0

我尝试添加一个'void'类型的函数,但我仍然得到相同的错误。 – Nic

回答

1

看来,wait()signal()功能通过Philosopher()称为是喜欢think()eat()功能 - 旨在由您提供(或包含在Philosopher()中)。这些与两个POSIX函数之间的名称冲突是不幸的,令人困惑,但没有意义。

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

+0

我认为你是正确的。谢谢 :) – Nic