#include<iostream>
#include<pthread.h>
#include<unistd.h>
using namespace std;
pthread_mutex_t mutex;
pthread_cond_t cond;
#define PRODUCER_NUM 1
#define CONSUMER_NUM 1
int nready;
void * consumer(void * args)
{
while(true)
{
pthread_mutex_lock(&mutex);
while(nready==0)
{
pthread_cond_wait(&cond,&mutex);
}
nready--;
cout <<"consume..." <<endl;
pthread_mutex_unlock(&mutex);
}
}
void * producer(void * args)
{
while(true)
{
usleep(100000);
pthread_mutex_lock(&mutex);
nready++;
pthread_cond_signal(&cond);
cout <<"produce ..."<<nready <<endl;
pthread_mutex_unlock(&mutex);
}
}
int main()
{
nready=0;
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(&cond,NULL);
pthread_t pid[PRODUCER_NUM+CONSUMER_NUM];
for(int i=0;i<PRODUCER_NUM;i++)
{
pthread_create(&pid[i],NULL,producer,NULL);
}
for(int i=PRODUCER_NUM;i<PRODUCER_NUM+CONSUMER_NUM;i++)
{
pthread_create(&pid[i],NULL,consumer,NULL);
}
for(int i=0;i<PRODUCER_NUM+CONSUMER_NUM;i++)
{
pthread_join(pid[i],NULL);
}
pthread_cond_destroy(&cond);
pthread_mutex_destroy(&mutex);
return 0;
}
linux c++ 基于条件变量实现生产者和消费者
于 2022-02-11 17:24:06 首次发布