#include<iostream>
using namespace std;
#include<unistd.h>
#include<pthread.h>
#include<vector>
pthread_mutex_t mutex;
pthread_cond_t cond;
vector<int>v;
void*producer(void*ptr){
while(1){
pthread_mutex_lock(&mutex);
v.push_back(1);
v.push_back(2);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
cout<<"写入数据:"<<endl;
for(auto num:v)
cout<<num<<"\t";
cout<<endl;
sleep(1);
}
}
void*consumer(void*ptr){
while(1){
pthread_mutex_lock(&mutex);
if(!v.empty()){
v.pop_back();
v.pop_back();
}else{
pthread_cond_wait(&cond,&mutex);
}
pthread_mutex_unlock(&mutex);
cout<<"读出数据:"<<endl;
for(auto num:v)
cout<<num<<"\t";
cout<<endl;
sleep(1);
}
}
int main(){
pthread_t prodt[5],consr[5];
for(int i=0;i<5;i++){
pthread_create(&prodt[i],NULL,producer,NULL);
pthread_create(&consr[i],NULL,consumer,NULL);
}
pthread_mutex_init(&mutex,NULL);
for(int i=0;i<5;i++){
pthread_detach(prodt[i]);
pthread_detach(consr[i]);
}
pthread_exit(NULL);
}