首页 > 解决方案 > 线程生产者和消费者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(等待生产者信号时的消费者)总是在等待生产者,但生产者已经是空的。退出循环的建议?

标签: cpthreadsproducer-consumerthread-synchronization

解决方案


推荐阅读