三个同步与互斥问题之生产者与消费者
来源:互联网 发布:照片打印软件 编辑:程序博客网 时间:2024/06/11 07:16
#include<stdio.h>
#include<pthread.h>
pthread_mutex_t mutex;
#define Max 10
pthread_cond_t pro;
pthread_cond_t con;
int buffer=0;//全局变量----一开始为0,只有生产者可以执行
void deal_produce(void *arg)
{//消费---
int i;
for(i=1;i<=Max;i++)
{//
pthread_mutex_lock(&mutex);
while(buffer!=0) pthread_cond_wait(&pro,&mutex);//锁住生产者,在有产品的时候
printf("producer produce item :%d\n",i);
buffer=i;
pthread_cond_signal(&con);//通知消费者
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void deal_consume(void *arg)
{//生产
int i;
for(i=1;i<=Max;i++)
{//加锁,消费的时候不准生产
pthread_mutex_lock(&mutex);
while(buffer==0) pthread_cond_wait(&con,&mutex);
printf("consumer consume item :%d\n",i);
buffer=0;//!?buffer--?
if(buffer==0) pthread_cond_signal(&pro);//没货待产
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
int main()
{
pthread_t consumer,producer;
pthread_mutex_init(&mutex,0);
//0 :NULL
//API :int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)
pthread_cond_init(&pro,0);
pthread_cond_init(&con,0);
pthread_create(&producer,NULL,&deal_produce,NULL);
pthread_create(&consumer,NULL,&deal_consume,NULL);
pthread_join(consumer);
pthread_join(producer);
pthread_cond_destroy(&pro);
pthread_cond_destroy(&con);
exit(0);
}
#include<pthread.h>
pthread_mutex_t mutex;
#define Max 10
pthread_cond_t pro;
pthread_cond_t con;
int buffer=0;//全局变量----一开始为0,只有生产者可以执行
void deal_produce(void *arg)
{//消费---
int i;
for(i=1;i<=Max;i++)
{//
pthread_mutex_lock(&mutex);
while(buffer!=0) pthread_cond_wait(&pro,&mutex);//锁住生产者,在有产品的时候
printf("producer produce item :%d\n",i);
buffer=i;
pthread_cond_signal(&con);//通知消费者
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
void deal_consume(void *arg)
{//生产
int i;
for(i=1;i<=Max;i++)
{//加锁,消费的时候不准生产
pthread_mutex_lock(&mutex);
while(buffer==0) pthread_cond_wait(&con,&mutex);
printf("consumer consume item :%d\n",i);
buffer=0;//!?buffer--?
if(buffer==0) pthread_cond_signal(&pro);//没货待产
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
int main()
{
pthread_t consumer,producer;
pthread_mutex_init(&mutex,0);
//0 :NULL
//API :int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)
pthread_cond_init(&pro,0);
pthread_cond_init(&con,0);
pthread_create(&producer,NULL,&deal_produce,NULL);
pthread_create(&consumer,NULL,&deal_consume,NULL);
pthread_join(consumer);
pthread_join(producer);
pthread_cond_destroy(&pro);
pthread_cond_destroy(&con);
exit(0);
}
0 0
- 三个同步与互斥问题之生产者与消费者
- 资源同步与互斥问题(生产者与消费者)
- 互斥与同步---生产者与消费者
- 进程同步互斥经典题之消费者与生产者问题
- 经典生产者与消费者问题(线程的同步与互斥)
- 线程的同步与互斥---生产者消费者模型
- 三个同步与互斥问题之哲学家就餐
- linux操作系统之生产者与消费者同步问题
- 经典进程同步问题-生产者与消费者
- C#生产者与消费者问题 线程同步
- java多线程同步:生产者与消费者问题
- 线程同步-生产者与消费者问题
- 生产者与消费者模式(线程的同步与互斥)
- 【线程的同步与互斥 (互斥量 条件变量 信号量)】生产者与消费者模型
- 线程的同步与互斥(生产者与消费者模型)
- linux中的生产者和消费者问题--信号量 互斥 同步
- python 生产者,消费者的同步互斥问题
- 用java实现的生产者与消费者多线程同步互斥模型
- Ubuntu_1204_64bit 通过工具 squid cache 搭建代理服务器
- Subsequence
- C 你妹儿啊~~~~~~
- java 基础知识 3
- mqtt的ClientPub
- 三个同步与互斥问题之生产者与消费者
- MVC4 引用DLL 成功越狱实体模型 自由调用存储过程 自由传递参数
- svn服务器搭建
- C语言:循环单链表的创建,遍历,插入
- Delphi XE8,C++ Builder XE8,RAD Studio XE8 Update1 精简版
- java 中 try catch finally 语句的执行顺序
- 浅谈对java中的hashset和Treeset 中重写equals()方法的不同及用法
- mqtt的ClientSub
- JavaScript 如何计算2个时间差 工作时间为8小时