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);
我不同意你的看法。最初,counter是0,BUFFER_SIZE是10,所以生产者不会去while循环。 – Helen
对于生产者来说,如果缓冲区已满意味着counter == BUFFER_SIZE,生产者将停止生产,所以生产者将停止。最初,缓冲区中没有项目,所以制作人可以制作一些东西。 – Helen
你是对的,我看到它错了...在思考如果pthread_mutex_lock(&mutex);使消费者在其while循环中取得锁定并永远等待。在这种情况下,生产者将永远不会产生任何东西,因为正在等待消费者释放互斥体 – Jorge