1

私は、食事の哲学者のパラダイムの例を実装することになっている問題に取り組んでいます。: はい、これは宿題です。誰かに聞かれる前に。

私は解決策を求めていません。Philosopher先生から以下で提供されたこの機能は理論的には機能するはずなので、私は混乱しています。waitおよびsignalは、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]);
4

1 に答える 1

0

によって呼び出されるwait()and関数は、and関数に似ているようです -- あなたが提供する (または に含まれる) ことを意図しています。これらと 2 つの POSIX 関数の間の名前の衝突は、残念ながら混乱を招きますが、意味はありません。signal()Philosopher()think()eat()Philosopher()

signal.hまたはを含めないでくださいsys/wait.h代わりに、それらの名前の関数に対して、ヘッダー ファイルまたはその他の方法で宣言を提供し、実装が実行可能ファイルにリンクされていることを確認します。

于 2016-12-07T15:23:55.577 に答える