`
mmdev
  • 浏览: 12954457 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

nth6

 
阅读更多
#include<stdio.h>
#include<pthread.h>
int MAX;
ptrhead_mutex_t the_mutex;
pthread_cond_t condc,condp1,condp2;
int buffer1=0,buffer2=0;
void*producer1(void *ptr)
{
int i;
for(i=1;i<MAX;i++)
{
pthread_mutex_lock(&the_mutex);
while(buffer!=0)pthread_cond_wait(&cndp1,&the_mutex);
buffer=i;
pthread_cond_signal(&condc);
pthread_mutex_unlock(&the_mutex);
}//end for
pthread_exit(0);
}


void*producer2(void *ptr)
{
int i;
for(i=MAX;i>0;i--)
{
pthread_mutex_lock(&the_mutex);
while(buffer!=0)pthread_cond_wait(&cndp2,&the_mutex);
buffer=i;
pthread_cond_signal(&condc);
pthread_mutex_unlock(&the_mutex);
}//end for
pthread_exit(0);
}


void*consumer(void*ptr)
{
int i;
for(i=1;i<=MAX;i++)
{
int a1=0,a2=0;
pthread_mutex_lock(&the_mutex);
while(buffer1==0) pthread_cond_wait(&condc,&the_mutex);
a1=buffer1;
buffer1=0;
while(buffer2==0) pthread_cond_wait(&condc,&the_mutex);
a2=buffer2;
buffer2=0;
pthread_cond_signal(&condp1);
pthread_cond_signal(&condp2);
pthread_mutex_unlock(&the_mutex);
}//end for
pthread_exit(0);
}


int main(int argc,char **agrv)
{
int max;
scanf("%d",&max);
MAX=max;
pthread_t pro1,pro2,con;
pthread_mutex_init(&the_mutex,0);
pthread_cond_init(&condc,0);
pthread_cond_init(&condp1,0);
pthread_cond_init(&condp2,0);
pthread_create(&con,0,consumer,0);
pthread_create(&pro1,0,producer1,0);
pthread_create(&pro2,0,producer2,0);
pthread_join(pro1,0);
pthread_join(pro2,0);
pthread_join(con,0);
pthread_cond_destroy(&condc);
pthread_cond_destroy(&condp2);
pthread_cond_destroy(&condp1);
pthread_mutex_destroy(&the_mutex);
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics