生产者消费者问题c没有消费者的输出

producer consumer problem c no output for consumer

我在这里尝试为我的插入和删除方法使用循环 queish 东西,以及使用插入和删除函数进行同步 我正在使用 gcc file.c -lpthread -lrt 和 运行 ./a.out 50 1 1.

进行编译

运行我的制作人正确地制作和输出

producer thread #0
consumer thread #0
producer produced 7

但无论出于何种原因我无法让我的消费者输出,

我试过把我的return0;对于锁和信号量之外的每个函数,它确实输出消费者,但是太多次了,每个线程应该只 运行 一次,

它还使用其中的标准计数信号量 2 以及单个互斥锁

这是我将 return 移到锁下方时发生的情况

producer thread #0
consumer thread #0
producer produced 7
consumer consumed 7
producer produced 5
producer produced 5
consumer consumed 5
consumer consumed 2
producer produced 7
producer produced 4
consumer consumed 7
consumer consumed 4
producer produced 6
consumer consumed 6
producer produced 1
consumer consumed 1
producer produced 9
consumer consumed 9
producer produced 2
consumer consumed 2
producer produced 6
consumer consumed 6

实际上如果我 运行 ./a.out 50 1 1 应该只有一个生产者和一个消费者

更新:正在开发一个新版本,所以收回我以前的代码,post 新版本

在函数 insert_item()remove_item() 中,returning(函数执行结束)发生在执行 pthread_mutex_unlock() 之前。这将防止他们解锁并防止第二次或以后执行这些功能。

取而代之的是,您应该将 return 的值存储在变量中,并在解锁后存储 return 。可以这样做:

int insert_item(buffer_item item)
{
    int ret;
    sem_wait(&empty);
    pthread_mutex_lock(&lock);
 
    if (size_check < BUFFER_SIZE)
    {
        buffer[insertBounds_check++] = item;
        size_check++;
        ret = 0;
    }
    else
    {
        ret = -1;
    }
    pthread_mutex_unlock(&lock);
    sem_post(&full);
    return ret;
}