Chinaunix首页 | 论坛 | 博客
  • 博客访问: 322650
  • 博文数量: 85
  • 博客积分: 3433
  • 博客等级: 中校
  • 技术积分: 844
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-29 01:11
文章分类

全部博文(85)

文章存档

2013年(1)

2012年(12)

2011年(13)

2010年(59)

我的朋友

分类: LINUX

2010-10-31 16:49:06

 也许大家头听过,生产者-消费者 模型吧, 就是利用线程同步的方法来实现的,本博文使用线程锁的方式来实现线程同步:

 

头文件:

**************************************************

*  # include            *
 # include          *
*  # include             *
*  # include           *

**************************************************

函数声明:

=================================================

void reader_function(void);
void writer_function(void);
void consumer_item(int nu);
int make_new_item(void);

===========================================

 

int buffer;

int num;

int buffer_has_item = 0;

pthread_mutex_t mutex;

int main(void)
{
  pthread_t reader;

  pthread_mutex_init(&mutex,NULL);
  pthread_create(&reader,NULL, (void *)reader_function, NULL);
  writer_function();

  return 0;
}

void reader_function(void)
{
  while(1)
    {
     pthread_mutex_lock(&mutex);
     if(buffer_has_item == 1)
      {
        consumer_item(buffer);
        buffer_has_item = 0;
      }
     pthread_mutex_unlock(&mutex);
     sleep(1);
    }
}

void writer_function(void)
{
   while(1)
  {
     pthread_mutex_lock(&mutex);
     if(buffer_has_item == 0)
      {
        buffer = make_new_item();
        printf(" New Item has makerd = %d\n",buffer);
        buffer_has_item = 1;
      }
       pthread_mutex_unlock(&mutex);
       sleep(1);
  }

int make_new_item(void)
{
  num = rand()%100;
  return num;
}

void consumer_item(int tmp_buffer)
{
   int con_num;
   con_num = tmp_buffer + 1000;
   printf(" Consumer num =  %d\n",con_num);
}

 

阅读(1120) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-31 18:57:13

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com