Chinaunix首页 | 论坛 | 博客
  • 博客访问: 63667
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 236
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-05 21:34
文章分类

全部博文(21)

文章存档

2015年(21)

我的朋友

分类: LINUX

2015-08-04 15:10:45

主函数建立两个线程,生产者和消费者,生产者使变量递增,消费者使变量递减。建立互斥区

点击(此处)折叠或打开

  1. //start from the very beginning,and to create greatness
  2. //@author: Chuangwei Lin
  3. //@E-mail:979951191@qq.com
  4. //@brief: 一个线程和互斥的例子

  5. #include <stdio.h>
  6. #include <pthread.h>//线程的头文件
  7. #include <sched.h>
  8. void *producter(void *arg);//生产者
  9. void *consumer(void *arg);//消费者
  10. int i;//缓冲区的计数值
  11. pthread_mutex_t mutex;//互斥区变量
  12. int running = 1;//线程运行控制
  13. /******************************************************
  14. 函数名:main函数
  15. 参数:
  16. 功能:多线程,互斥
  17. *******************************************************/
  18. int main(int argc, char const *argv[])
  19. {
  20.     pthread_t producter_t;//生产者线程控制
  21.     pthread_t consumer_t;//消费者线程控制
  22.     pthread_mutex_init(&mutex,NULL);//初始化互斥
  23.     pthread_create(&producter_t,NULL,(void*)producter,NULL);//建立生产者线程
  24.     pthread_create(&consumer_t,NULL,(void*)consumer,NULL);//建立消费者线程
  25.     usleep(1);//等待线程创建完毕
  26.     
  27.     running = 0;//设置线程退出值
  28.     pthread_join(producter_t,NULL);//等待生产者线程退出
  29.     pthread_join(consumer_t,NULL);//等待消费者线程退出
  30.     pthread_mutex_destroy(&mutex);//销毁互斥

  31.     return 0;
  32. }
  33. /******************************************************
  34. 函数名:void *producter(void *arg)
  35. 参数:
  36. 功能:生产者函数,在互斥区里使变量i增加
  37. *******************************************************/
  38. void *producter(void *arg)
  39. {
  40.     while(running)//没有设置退出时
  41.     {
  42.             pthread_mutex_lock(&mutex);//进入互斥区
  43.             i++;//计数值增加
  44.             printf("生产者:当前总数量:%d\n",i );
  45.             pthread_mutex_unlock(&mutex);//离开互斥区
  46.     }
  47. }
  48. /******************************************************
  49. 函数名:void *consumer(void *arg)
  50. 参数:
  51. 功能:消费者函数,在互斥区里使变量i减少
  52. *******************************************************/
  53. void *consumer(void *arg)
  54. {
  55.     while(running)//没有设置退出时
  56.     {
  57.             pthread_mutex_lock(&mutex);//进入互斥区
  58.             i--;//计数值减少
  59.             printf("消费者:当前总数量:%d\n",i );
  60.             pthread_mutex_unlock(&mutex);//离开互斥区
  61.     }
  62. }
用命令gcc -o mutex mutex.c -lpthread进行编译,pthread使线程函数的链接库
运行结果如下:

点击(此处)折叠或打开

  1. [scut_lcw@localhost lcw20150804]$ ./mutex
  2. 生产者:当前总数量:1
  3. 生产者:当前总数量:2
  4. 生产者:当前总数量:3
  5. 生产者:当前总数量:4
  6. 生产者:当前总数量:5
  7. 生产者:当前总数量:6
  8. 生产者:当前总数量:7
  9. 生产者:当前总数量:8
  10. 生产者:当前总数量:9
  11. 消费者:当前总数量:8
而且每次运行的结果都不大一样,体现了进程之间的竞争。
阅读(959) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~