【问题标题】:C `signal` has too few argumentsC `signal` 的参数太少
【发布时间】:2017-04-22 14:19:08
【问题描述】:

我正在解决一个问题,我应该在其中实现一个哲学家就餐范式的示例。 注意:是的,这是一个家庭作业,在任何人问之前。

不过,我并不是在寻求解决方案。我很困惑,因为我的老师在下面提供的这个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]);

【问题讨论】:

  • 哲学家需要用返回数据类型正确声明
  • 您是否尝试过阅读您尝试使用的功能的手册?它在大多数情况下都有帮助。
  • 我尝试在函数中添加void 类型,但仍然出现相同的错误。
  • @EugeneSh。你能给我指出手册的正确方向吗?
  • 显然信号需要 2 个参数,而你只提供一个

标签: c signals wait semaphore dining-philosopher


【解决方案1】:

看来Philosopher() 调用的wait()signal() 函数类似于think()eat() 函数- 打算由您提供(或者包含在Philosopher() 中)。这两个 POSIX 函数之间的名称冲突令人遗憾且令人困惑,但没有意义。

不要包含signal.hsys/wait.h。相反,通过头文件或其他方式为这些名称的你的函数提供声明,并确保你的实现链接到可执行文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多