c - 线程生产者和消费者while循环
问题描述
void producer(char* line){
/* Produtor */
pthread_mutex_lock(&buffer_mutex);
while (occupied >= MAX_COMMANDS){
printf("produzi wait\n");
pthread_cond_wait(&less, &buffer_mutex);
}
printf("insere no index: %d\n",buff_write_idx);
insertCommand(line, buff_write_idx);
buff_write_idx = (buff_write_idx + 1) % MAX_COMMANDS;
occupied++;
printf("produzi. occupied = %d\n", occupied);
pthread_cond_signal(&more);
pthread_mutex_unlock(&buffer_mutex);
}
/******************************************************/
char* consumer(){
pthread_mutex_lock(&buffer_mutex);
while(occupied <= 0 ){
printf("consumidor wait\n");
pthread_cond_wait(&more, &buffer_mutex);
}
printf("retira do index: %d\n",buff_read_idx);
char* command = removeCommand(buff_read_idx);
buff_read_idx = (buff_read_idx + 1) % MAX_COMMANDS;
occupied--;
printf("consumidor. occupied = %d\n", occupied);
pthread_cond_signal(&less);
pthread_mutex_unlock(&buffer_mutex);
return command;
}
我的问题是,在我最后运行我的程序之后,在缓冲区完成了必要的操作之后,在 CONSUMER(等待生产者信号时的消费者)总是在等待生产者,但生产者已经是空的。退出循环的建议?
解决方案
推荐阅读
- docker - 我可以在不重新构建 docker 映像的情况下更新我在 Google Kubernetes Engine (GKE) 中的代码吗?
- php - http://localhost:80 无法通过 UniServer ZeroXIII 运行 Apache 服务器
- javascript - jQuery隐藏onLoad不起作用
- java - 打开通知设置页面android oreo
- plsql - ORA-04088: 执行触发器 'OES2.T_UPDATE_ORDERS_GROSS' 期间出错
- python - 使用 Webdriver (selenium & python) 向下滚动时提取动态 div 列表时遇到问题
- woocommerce - 禁用数量字段中的链接
- java - 找不到存储的图像
- node.js - updateMany 使用标准“all”更新数组字段不起作用
- swift - 从 Rxswift 订阅后不接收最后一个值