C `signal` имеет слишком мало аргументов
Я работаю над проблемой, где я должен реализовать пример парадигмы столовой философии. Примечание: Да, это домашнее задание, прежде чем кто-либо спросит.
Я не прошу решение, хотя. Я смущен, потому что это Philosopher
Теоретически должна работать та функция, которая была предоставлена моим учителем. wait
а также signal
являются функцией, используемой в C для системных вызовов ОС.
Я включил их, используя:
/* 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 ответ
Похоже, что wait()
а также signal()
функции, вызываемые Philosopher()
похожи на think()
а также eat()
функции - предназначены для предоставления вами (или включены в Philosopher()
). Столкновение имен между этими двумя функциями POSIX вызывает сожаление и сбивает с толку, но не имеет смысла.
Не включать signal.h
или же sys/wait.h
, Вместо этого, предоставьте декларации, с помощью заголовочного файла или иным образом, для ваших функций этих имен и убедитесь, что ваши реализации связаны с исполняемым файлом.