2016-12-07 138 views
1

我正在研究一個問題,我應該實現一個哲學家哲學範式的例子。 注意:是的,這是一個家庭作業,在任何人問之前。C`signal`的參數太少

雖然我不是要求解決方案。我很困惑,因爲我的老師在下面提供的這個Philosopher函數在理論上應該工作。 waitsignal是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]); 
+0

哲學家需要用返回數據類型正確聲明 –

+0

您是否嘗試閱讀正在嘗試使用的函數的手冊?它在這樣的大多數情況下都有幫助。 –

+0

我嘗試添加一個'void'類型的函數,但我仍然得到相同的錯誤。 – Nic

回答

1

看來,wait()signal()功能通過Philosopher()稱爲是喜歡think()eat()功能 - 旨在由您提供(或包含在Philosopher()中)。這些與兩個POSIX函數之間的名稱衝突是不幸的,令人困惑,但沒有意義。

不要包括signal.hsys/wait.h。相反,請通過頭文件或其他方式爲這些名稱的函數提供聲明,並確保將您的實現鏈接到可執行文件中。

+0

我認爲你是正確的。謝謝 :) – Nic