创造两个线程分别充当生产者和消费者,生产者和消费者对同一个deque进行操作,生产者负责利用生产数据(deque : push_back
),消费者消费数据(deque : pop_back
)。但是由于线程竞争资源的优先级是无法确定的,我们最终无法保证程序运行结束,deque始终为空.(如代码1)
#include<iostream>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>
#include<time.h>
#include<deque>
#include<algorithm>
#include<iterator>
using namespace std;
deque<int> dt;
struct pcst
{
pthread_mutex_t mutex;
pthread_cond_t not_full;
pthread_cond_t not_empty;
}shared = {PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER,
PTHREAD_COND_INITIALIZER};
void* producer(void *arg)
{
pthread_mutex_lock(&shared.mutex);
int count = 10;
while(count-- > 0)
{
srand(time(NULL));
dt.push_back(rand() % 256);
cout<<dt.back()<<" in"<<endl;
sleep(1);
}
pthread_cond_signal(&shared.not_empty);
pthread_mutex_unlock(&shared.mutex);
}
void* consumer(void *arg)
{
pthread_mutex_lock(&shared.mutex);
while(!dt.empty())
{
cout<<dt.back()<<" out"<<endl;
dt.pop_back();
}
cout<<"size: "<<dt.siz