Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 生产者消费者:程序接收信号SIGSEGV,分段故障_C_Semaphore_Producer Consumer - Fatal编程技术网

C 生产者消费者:程序接收信号SIGSEGV,分段故障

C 生产者消费者:程序接收信号SIGSEGV,分段故障,c,semaphore,producer-consumer,C,Semaphore,Producer Consumer,我试图用C写操作系统生产者消费者问题。我得到了上面提到的“细分错误”。这里很难解释所有的事情,所以我已经在github上发布了代码。看一眼会让你更好地了解我想问的问题 Github链接: 我的文件顺序: prod\u cons\u s.c(主文件) sem.h(包括threads.h) threads.h(包括q.h) q.h(包括TCB.h) 这正是我面临的问题 当我尝试执行V操作并将休眠进程从SemQ带回RunQ时,我遇到了这个错误。 以下是生产者-消费者的场景 我有一个RunQ与生产者->

我试图用C写操作系统生产者消费者问题。我得到了上面提到的“细分错误”。这里很难解释所有的事情,所以我已经在github上发布了代码。看一眼会让你更好地了解我想问的问题

Github链接:

我的文件顺序:
prod\u cons\u s.c
(主文件)
sem.h(包括threads.h)

threads.h(包括q.h)

q.h(包括TCB.h)

这正是我面临的问题

当我尝试执行V操作并将休眠进程从SemQ带回RunQ时,我遇到了这个错误。 以下是生产者-消费者的场景

我有一个RunQ与生产者->消费者->消费者->生产者->消费者

  • 第一个生产者生产一个产品。成功
  • 消费者消费该商品。成功
  • 此使用者调用
    P(&EMPTY)
    ,并将信号量计数器调低到-1。从而从RunQ中删除此使用者进程并将其添加到SemQ。上下文与运行RunQ中下一个进程(生产者)的CPU交换。成功
  • 现在,当下一个生产者运行时,它最终应该调用
    V(&EMPTY)
    将信号量计数器返回到0,并将步骤3中的休眠进程返回到RunQ。
    错误
  • 这就是我得到这个错误的地方。
    任何帮助都将不胜感激

    学习如何使用调试器和堆栈跟踪。不要像那样在头文件中定义函数。嘿,伙计们,是的,我使用GDB进行调试,找到我试图取消引用的空指针非常有帮助。这就抛出了错误。现在开始工作了!再次感谢。