2016-04-20 155 views
1

这是我对生产者和消费者问题的代码。它可以被编译,但是当我运行该程序时,它什么也不打印。我测试程序,发现问题可能是关于sem_wait()。为什么程序可以编译但输出错误?谢谢。生产者和消费者的sem_wait()

int main(int argc, char *argv[]) { 
    pthread_mutex_init(&mutex, NULL); 
    empty = sem_open("/mysem", O_CREAT, 0644, BUFFER_SIZE); 
    full = sem_open("/mysem", O_CREAT, 0644, 0); 

    pthread_create(&pro_thread, NULL, producer, NULL); 
    pthread_create(&con_thread, NULL, consumer, NULL); 

    pthread_exit(NULL); 

    return 0; 
} 

是否sem_open()函数正确?我评论下面的行,程序可以运行...也许问题是关于sem_open?

empty = sem_open("/mysem", O_CREAT, 0644, BUFFER_SIZE); 

回答

0

看来你的制作人从来没有产生任何

检查信号名称。可能是emptyfull与您在sem_open函数中使用相同名称的实例相同

+0

我不同意你的看法。最初,counter是0,BUFFER_SIZE是10,所以生产者不会去while循环。 – Helen

+0

对于生产者来说,如果缓冲区已满意味着counter == BUFFER_SIZE,生产者将停止生产,所以生产者将停止。最初,缓冲区中没有项目,所以制作人可以制作一些东西。 – Helen

+0

你是对的,我看到它错了...在思考如果pthread_mutex_lock(&mutex);使消费者在其while循环中取得锁定并永远等待。在这种情况下,生产者将永远不会产生任何东西,因为正在等待消费者释放互斥体 – Jorge