生产者消费者---C实现
来源:互联网 发布:sql数据库查询软件 编辑:程序博客网 时间:2024/04/27 06:46
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX_NODE_NUMBER (1000*10000)
struct node{
int value;
struct node * next;
};
volatile struct node *first,*divider,*last;
pthread_mutex_t list_lock;
void producer(void)
{
int i;
struct node * new = NULL, *tmp = NULL;
printf("hi,I am the producer/n");
for(i=1;i<=MAX_NODE_NUMBER;i++){
new = malloc(sizeof(struct node));
if(new == NULL){
printf("malloc new node error!!!/n");
return;
}
new->value = i;
new->next = NULL;
pthread_mutex_lock(&list_lock);
last->next = new;
last = new;
pthread_mutex_unlock(&list_lock);
}
printf("producer exit.../n");
}
void consumer(void)
{
struct node * tmp;
printf("hi,I am the consumer/n");
while(1){
pthread_mutex_lock(&list_lock);
if(first!=last){
if(first->next->value == MAX_NODE_NUMBER){
pthread_mutex_unlock(&list_lock);
return;
}else{
first->value++;
tmp = first;
first = first->next;
free(tmp);
}
}
pthread_mutex_unlock(&list_lock);
}
}
int main(void)
{
pthread_t thread[2];
printf("node number : %d/n",MAX_NODE_NUMBER);
first = divider = last = malloc(sizeof(struct node));
if(first == NULL){
printf("malloc first node error!!!/n");
return;
}
first->value = 0;
first->next = NULL;
pthread_mutex_init (&list_lock,NULL);
if(pthread_create(&thread[0],NULL,(void *)producer,NULL) != 0){
printf("create producer error/n");
return -1;
}
if(pthread_create(&thread[1],NULL,(void *)consumer,NULL) != 0){
printf("create producer error/n");
return -1;
}
pthread_join(thread[0],NULL);
pthread_join(thread[1],NULL);
printf("main thread exiting.../n");
return 0;
}
- 生产者消费者---C实现
- c实现生产者消费者源代码
- C语言实现生产者-消费者问题
- linux c pv 实现生产者消费者模型
- 生产者消费者问题---C语言实现
- Linux C 实现生产者消费者问题
- C语言生产者与消费者-随机数实现
- 生产者消费者问题(C实现)
- 生产者-消费者问题及C语言实现
- c 生产者与消费者
- vc实现生产者消费者
- 生产者-消费者多线程实现
- 生产者消费者实现代码
- 生产者消费者实现
- 生产者消费者java实现
- c#实现生产者消费者
- 生产者消费者问题(实现)
- 生产者、消费者简单实现
- FL2440下的CAN总线实验
- 博客第一章
- 在AIX5.3系统上安装oracle9i和weblogic
- liveCD修复grub
- CruiseControl.NET搭配VisualSVN,使用Https协议下载源代码
- 生产者消费者---C实现
- TBB使用心得
- Java.计算器图形界面设计练习
- 学习与工作杂谈
- 曾找到的一些学习资料的地址,多数是视频,新手在这赚点分下点东西
- 【职场哲学】独立女性不可不知的职场哲学
- .NET操作Excel的两种方式对比
- Fedora14下eclipse的SVN安装配置
- 摘要:Indexing Service - OpenQuery()