2016-12-07 5 views
1

Я работаю над проблемой, где я должен реализовать пример обеденного философского парадигмы. Примечание: Да, это домашнее задание, прежде чем кто-либо спросит.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]); 
+0

Философ должен быть объявлен правильно с данными типа возврата –

+0

Вы пытались прочитать руководство по функциям, которые вы пытаетесь использовать? Это помогает в большинстве случаев, подобных этому. –

+0

Я попытался добавить к функции функцию 'void', но все равно получаю те же ошибки. – Nic

ответ

1

Оказывается, что wait() и signal() функции, вызываемые Philosopher() подобны think() и eat() функции, которые должны быть предоставлены вами (или включены в комплект поставки Philosopher()). Столкновение имен между этими двумя функциями POSIX является неудачным и запутанным, но не значимым.

Не Включает signal.h или sys/wait.h. Вместо этого укажите объявления, заголовочные файлы или другие, для своих функций этих имен и убедитесь, что ваши реализации связаны с исполняемым файлом.

+0

Я думаю, что вы правы. Спасибо :) – Nic