我试图使生产者/消费者应用程序。问题是,我的制作者正在填充整个缓冲区,那么消费者将删除整个缓冲区......当消费者制作一个post
到信号量时,消费者是不是应该从缓冲区中删除一个项目?使用生产者和消费者,sempahore在C
我的代码:
void* producerFunc(void* arg)
{
while(n_insertions < N_PRODUCTS)
{
sem_wait(&sem_postAvaliable);
sem_wait(&mutex);
//Insert Item
sem_post(&mutex);
sem_post(&sem_posTaken);
}
pthread_exit(NULL);
}
void* consumerFunc(void* arg)
{
while(n_consumed < N_PRODUCTS)
{
sem_wait(&sem_posTaken);
sem_wait(&mutex);
//Remove from bufer
sem_post(&mutex);
sem_post(&sem_postAvaliable);
}
pthread_exit(NULL);
}
n_insertions
是一个全球性的整数计算插入缓冲项目的数量;
n_consumed
是一个全局整数,用于统计消费者从缓冲区中消耗项目的次数。
这很奇怪,在什么值初始化信号量'sem_postAvaliable'和'sem_posTaken'?此外,您可以使用'pthread_mutex_t'声明一个互斥锁,然后使用'pthread_mutex_lock'和'pthread_mutex_unlock'解锁并锁定该互斥锁。 – OiciTrap
@cursillosonline sem_postAvaliable设置为5,即我的缓冲区的大小。 sem_posTaken用0初始化,因为缓冲区没有空间。我会检查与pthread_mutex_lock(任何显着差异?) – PlayHardGoPro