一个线程和互斥的例子
2015-08-12 13:25
295 查看
主函数建立两个线程,生产者和消费者,生产者使变量递增,消费者使变量递减。建立互斥区
用命令gcc -o mutex mutex.c -lpthread进行编译,pthread使线程函数的链接库
运行结果如下:
而且每次运行的结果都不大一样,体现了进程之间的竞争。
[code]//start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191@qq.com //@brief: 一个线程和互斥的例子 #include <stdio.h> #include <pthread.h>//线程的头文件 #include <sched.h> void *producter(void *arg);//生产者 void *consumer(void *arg);//消费者 int i;//缓冲区的计数值 pthread_mutex_t mutex;//互斥区变量 int running = 1;//线程运行控制 /****************************************************** 函数名:main函数 参数: 功能:多线程,互斥 *******************************************************/ int main(int argc, char const *argv[]) { pthread_t producter_t;//生产者线程控制 pthread_t consumer_t;//消费者线程控制 pthread_mutex_init(&mutex,NULL);//初始化互斥 pthread_create(&producter_t,NULL,(void*)producter,NULL);//建立生产者线程 pthread_create(&consumer_t,NULL,(void*)consumer,NULL);//建立消费者线程 usleep(1);//等待线程创建完毕 running = 0;//设置线程退出值 pthread_join(producter_t,NULL);//等待生产者线程退出 pthread_join(consumer_t,NULL);//等待消费者线程退出 pthread_mutex_destroy(&mutex);//销毁互斥 return 0; } /****************************************************** 函数名:void *producter(void *arg) 参数: 功能:生产者函数,在互斥区里使变量i增加 *******************************************************/ void *producter(void *arg) { while(running)//没有设置退出时 { pthread_mutex_lock(&mutex);//进入互斥区 i++;//计数值增加 printf("生产者:当前总数量:%d\n",i ); pthread_mutex_unlock(&mutex);//离开互斥区 } } /****************************************************** 函数名:void *consumer(void *arg) 参数: 功能:消费者函数,在互斥区里使变量i减少 *******************************************************/ void *consumer(void *arg) { while(running)//没有设置退出时 { pthread_mutex_lock(&mutex);//进入互斥区 i--;//计数值减少 printf("消费者:当前总数量:%d\n",i ); pthread_mutex_unlock(&mutex);//离开互斥区 } }
用命令gcc -o mutex mutex.c -lpthread进行编译,pthread使线程函数的链接库
运行结果如下:
[code][scut_lcw@localhost lcw20150804]$ ./mutex 生产者:当前总数量:1 生产者:当前总数量:2 生产者:当前总数量:3 生产者:当前总数量:4 生产者:当前总数量:5 生产者:当前总数量:6 生产者:当前总数量:7 生产者:当前总数量:8 生产者:当前总数量:9 消费者:当前总数量:8
而且每次运行的结果都不大一样,体现了进程之间的竞争。
相关文章推荐
- maven项目(错误二) spring发送邮件报“com.sun.mail.smtp.SMTPAddressFailedException: 553 5.7.1”的解决方案
- 解析json数据的组件-jackson
- 黑马程序员——Java基础--多线程(1)
- linux查看CPU及内存信息
- 使用 screen 管理你的远程会话
- 数据库查询 添加伪列
- 串口通信中数据的奇偶校验位算法
- 9.9递归和动态规划(八)——给定数量不限的硬币,币值为25分,10分,5分,1分,计算n分有几种表示法
- iOS开发之OC继承、初始化方法、便利构造器
- 编写简单的内核模块及内核源码下载,内核模块Makefile编写
- Asp.Net customErrors与httpErrors的区别
- [hdu5372 Segment Game]树状数组
- unity初写游戏(三)人物的瞬移
- 第8章 IO输入输出
- 9.9递归和动态规划(七)——实现许多图片编辑软件都支持的“填充颜色”功能
- stringstream的用法
- 数据库 表字段添加表情
- Ubuntu 14.04 DNS 配置
- phpcms中常用代码总结
- JMS activemq