在生产者消费者信号量中共享内存缓冲区

时间:2017-05-10 23:59:52

标签: c memory mutex semaphore producer-consumer

我有一个关于如何在信号量集中使用共享内存缓冲区的问题。我正在做经典的消费者生产者问题,我将一个新项目添加到缓冲区堆栈,并根据调度程序,我想删除生产者生成的第一个项目。 以下是我的制作人和消费者代码:

int produce_item(){
    int item = rand()%50 +1;
    printf("Producer produces %d\n",item);
    sleep(1);
    return item;
}

void consume_item(int item){
    printf("Consumer consumes %d\n",item);
    sleep(2);
}
void* consumer(void * arg) {
    int item, j=0;
    while(1){
        down(full);
        down(mutex);    
        consume_item(item);
        buffer[j++] = item; 
        up(mutex);
        up(empty);
    }
    return 0;
}

void* producer(void* arg) { 
    int item, i;
    while(1){
        item  = produce_item();
        down(empty);
        down(mutex);
        buffer[i++]=item;
        up(mutex);
        up(full);
        sleep(1);
    }

我的缓冲区被视为全局变量

这是一个测试运行,它显示了我的问题,为什么它只是一遍又一遍地使用同一个项目?

Consumer consumes 32622
Producer produces 16
Consumer consumes 32622
Producer produces 22
Consumer consumes 32622
Producer produces 1
Consumer consumes 32622
Producer produces 16
Consumer consumes 32622
Producer produces 15

0 个答案:

没有答案