2016-12-07 5 views
1

Ich arbeite an einem Problem, bei dem ich ein Beispiel für das Ess-Philosoph-Paradigma implementieren soll. Hinweis: Ja das ist eine Hausaufgabe, bevor jemand fragt.C `signal` hat zu wenige Argumente

Ich bitte nicht um eine Lösung. Ich bin verwirrt, weil diese Philosopher Funktion, die unten von meinem Lehrer geliefert wurde, theoretisch funktionieren soll. wait und signal sind die in C für OS-Systemaufrufe verwendeten Funktionen.

Ich habe sie mit eingeschlossen:

/* 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]); 
    } 
} 

Allerdings, wenn ich den Fehler kompiliert:

Main.c:38:19: error: too few arguments to function call, expected 2, have 1 
       signal (Forks[i]); 
+0

Philosoph muss korrekt deklariert werden mit Rückgabedatentyp –

+0

Haben Sie versucht, das Handbuch für die Funktionen zu lesen, die Sie verwenden möchten? Es hilft in den meisten Fällen wie diesem. –

+0

Ich habe versucht, einen "void" -Typ zu der Funktion hinzuzufügen, aber ich bekomme immer noch die gleichen Fehler. – Nic

Antwort

1

Es scheint, dass die wait() und signal() von Philosopher() aufgerufenen Funktionen sind wie die think() und eat() Funktionen - sollen von Ihnen zur Verfügung gestellt werden (oder auch mit Philosopher() enthalten). Der Namenskonflikt zwischen diesen und zwei POSIX-Funktionen ist unglücklich und verwirrend, aber nicht sinnvoll.

Nicht einschließlich signal.h oder sys/wait.h. Stellen Sie stattdessen Deklarationen per Header-Datei oder anders für Ihre Funktionen dieser Namen bereit, und stellen Sie sicher, dass Ihre Implementierungen in die ausführbare Datei verknüpft sind.

+0

Ich denke, Sie sind richtig. Vielen Dank :) – Nic

Verwandte Themen