C `signal` 参数太少
C `signal` has too few arguments
我正在研究一个问题,我应该在其中实施哲学家用餐范式的一个例子。 注意:是的,这是一个家庭作业,在任何人问之前。
虽然我不是在寻求解决方案。我很困惑,因为我的老师在下面提供的这个 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]);
看来 Philosopher()
调用的 wait()
和 signal()
函数类似于 think()
和 eat()
函数——旨在由你(或包含在 Philosopher()
中)。这些和两个 POSIX 函数之间的名称冲突令人遗憾且令人困惑,但没有意义。
不要包括signal.h
或sys/wait.h
。相反,通过头文件或其他方式为这些名称的您的函数提供声明,并确保您的实现链接到可执行文件中。
我正在研究一个问题,我应该在其中实施哲学家用餐范式的一个例子。 注意:是的,这是一个家庭作业,在任何人问之前。
虽然我不是在寻求解决方案。我很困惑,因为我的老师在下面提供的这个 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]);
看来 Philosopher()
调用的 wait()
和 signal()
函数类似于 think()
和 eat()
函数——旨在由你(或包含在 Philosopher()
中)。这些和两个 POSIX 函数之间的名称冲突令人遗憾且令人困惑,但没有意义。
不要包括signal.h
或sys/wait.h
。相反,通过头文件或其他方式为这些名称的您的函数提供声明,并确保您的实现链接到可执行文件中。