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, Вместо этого, предоставьте декларации, с помощью заголовочного файла или иным образом, для ваших функций этих имен и убедитесь, что ваши реализации связаны с исполняемым файлом.

Другие вопросы по тегам