Pthreads和Semaphores-使用C的多个生产者/消费者

时间:2014-04-26 21:07:22

标签: c pthreads mutex semaphore

使用C的生产者/消费者问题

我创建了多个生产者和多个消费者线程,生产者线程将睡眠一段随机时间(小于给定的整数)并生成一个随机数,将其存储在缓冲区数组中....类似地,消费者线程将随机睡觉,消耗生产者线程产生的随机数... 我必须实现一个代码,当缓冲区为空时,消费者线程必须等待并且生产者线程必须开始生成并且在生产者线程生成之后...消费者线程应该恢复消耗.......同样当缓冲区已满,生产者线程必须等待并且消费者线程应该消耗,并且在消费之后,生产者线程应该恢复。

我当前正在使用sched_yield()当缓冲区已满且缓冲区为空但它不工作且发生死锁。

请有人帮我解决这个问题。谢谢提前

请参阅此链接link

中的代码

1 个答案:

答案 0 :(得分:0)

我没有看到使用sched_yield创建死锁的方法。你在做这样的事吗?

char buffer_is_empty;
while (buffer_is_empty){
    sched_yield();
}

这可能会创建一个无限循环,因为您在buffer_is_empty上有数据争用。那就是UB,但是通常编译器会生成将buffer_is_empty保存在寄存器中的代码,因此它永远不会注意到内存已经发生了变化。要解决此问题,您需要在使用buffer_is_empty时使用互斥锁。如果我猜错了,请展示一些代码来更好地描述你的问题。