C 使用信号量编译但未运行的生产者-消费者代码

C 使用信号量编译但未运行的生产者-消费者代码,c,compilation,pthreads,semaphore,producer-consumer,C,Compilation,Pthreads,Semaphore,Producer Consumer,我的处境非常棘手,因为我无法使用pthreads解决生产者-消费者问题。代码可以编译,但当我运行代码时,什么都不会发生,预期的输出也不会显示。我相信我的生产者和消费者线程中有一个关于if/else语句的问题,但我可能是另外一个问题。代码如下所示: 要在命令行上编译它,请执行以下操作: gcc -pthread -lrt semaphore.c -o semaphore 一旦运行该程序,它将显示正确的输出 ,您可能需要考虑一些示例输出来配合它;但我注意到,您的生产者和消费者线程开始于: in

我的处境非常棘手,因为我无法使用pthreads解决生产者-消费者问题。代码可以编译,但当我运行代码时,什么都不会发生,预期的输出也不会显示。我相信我的生产者和消费者线程中有一个关于if/else语句的问题,但我可能是另外一个问题。代码如下所示:

要在命令行上编译它,请执行以下操作:

gcc -pthread -lrt semaphore.c -o semaphore  

一旦运行该程序,它将显示正确的输出

,您可能需要考虑一些示例输出来配合它;但我注意到,您的生产者和消费者线程开始于:

int rNum = rand() / RAND_DIVISOR;
sleep(rNum);

只需从两个线程中删除它,程序就可以正常工作。在我的linux版本中,RAND_MAX为2^31,因此每个线程可能会导致长达21秒的睡眠时间。

这似乎是一个很好的睡眠时间。您可能需要检查
pthread_create
的返回值。最起码要在关键位置放置一些打印语句,然后运行它,这样我们就可以看到它去了哪里。。。