Linux下多线程打印奇数偶数
练习Linux多线程环境下的第一个例程:
存在三个不同的线程:
线程1只输出----------。
线程2只输出偶数。
线程3只输出奇数。
结果输出:
-----------
0
-----------
1
-----------
2
-----------
3
一直到:
-----------
999
-----------
1000
定义结构体:struct oddevenzero_t
struct oddevenzero_t8 { 9 pthread_mutex_t mu_odd; 10 pthread_mutex_t mu_even; 11 pthread_mutex_t mu_zero;12 int n;13 int num;14 };1516 struct oddevenzero_t *test;
线程和互斥锁创建:
int main()64 {65 pthread_t tid;66 int ret, i = 0;67 test = (struct oddevenzero_t*)malloc(sizeof(struct oddevenzero_t));68 pthread_mutex_init(&test->mu_odd, NULL);69 pthread_mutex_init(&test->mu_zero, NULL);70 pthread_mutex_init(&test->mu_even, NULL);71 pthread_mutex_lock(&test->mu_odd);72 pthread_mutex_lock(&test->mu_even);73 pthread_mutex_unlock(&test->mu_zero);74 test->n = 1000 + 1;75 test->num = 0;76 for(i = 1; i <= 3; i++)77 {78 ret = pthread_create(&tid, NULL, task, (void*)i);80 pthread_detach(tid);81 82 if(ret != 0)83 {84 fprintf(stderr, "creat thread err:%s\n", strerror(ret));85 exit(1);86 }87 }89 sleep(1);90 return 0;91 }
线程函数:
19 void *task(void *arg)20 {21 if((int)arg == 1)22 {24 while(1){25 pthread_mutex_lock(&test->mu_zero);26 if(test->num%2 == 0){27 printf("-----------\n");28 pthread_mutex_unlock(&test->mu_odd);29 }30 else{31 printf("-----------\n");32 pthread_mutex_unlock(&test->mu_even);33 }34 }35 }36 if((int)arg == 2)37 {39 while(1){40 pthread_mutex_lock(&test->mu_odd);41 printf("%d\n", test->num);42 test->num ++;43 if(test->num < test->n){44 pthread_mutex_unlock(&test->mu_zero);45 }46 }47 }48 if((int)arg == 3)49 {51 while(1){52 pthread_mutex_lock(&test->mu_even);53 printf("%d\n", test->num);54 test->num ++;55 if(test->num < test->n){56 pthread_mutex_unlock(&test->mu_zero);57 }58 }59 }60 return NULL;61 }
Linux下多线程打印奇数偶数相关推荐
- Linux下多线程编译
linux下多线程编译注意事项: 编译时加入 -lm -lpthread参数 参数说明:-lm 使用math.h中声明的库函数还有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm ...
- linux下多线程的创建与等待详解 【转载】
linux下多线程的创建与等待详解 http://blog.chinaunix.net/uid-23842323-id-2656572.html 所有线程都有一个线程号,也就是Thread ID.其类 ...
- linux 多线程 semaphore ,Linux下多线程编程-Pthread和Semaphore使用.doc
比锄戴垒丛共麦溺庄哆氏葫季袒飞闲棉铆稼椰悲倘寓矩案铺汞嫡懂伸腑箩五穗颗撩护尚巷苯宅瑚铱焕涅职枝怎摔什街杠写冻泡峡蠢舀以咽铝皇篮糠村墟凤帜攒摧定畜遁陛葛杯复妄婚赣续踌肖祷就抖帘荒徘魂圭焙酸劈待钞林讯啊铂 ...
- [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)
本文可任意转载,但必须注明作者和出处. [原创]手把手教你Linux下的多线程设计(一) --Linux下多线程编程详解 原 ...
- linux使用佳能ip1188,在Linux下安装打印驱动,以佳能LBP2900+为例
相较于在Windows下安装打印驱动程序,在linux下安装打印驱动程序要复杂一些,不过安装成功后,打印驱动比在Windows下稳定,不会出现让人迷惑无从下手的问题,这正是linux系统相比于wind ...
- linux下的扑克游戏,linux下多线程扑克游戏框架.doc
linux下多线程扑克游戏框架 linux下多线程扑克游戏框架 /* *rc.c *文件描述: *1)提供了linux下"升级"(北方常见的一种扑克玩法)游戏的框架. *2)库:g ...
- Linux下多线程编程
线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(process)中只允许 ...
- 如何交替打印奇数偶数
前言 多线程并发编程时,难免会遇到线程间的通信问题.线程通信方式的思想大体上来说可以分为两种:共享和传递. 线程通信 共享的实现方式可以是共享变量.共享文件.数据库.网络等.传递的实现方式可以是消息队 ...
- Linux下多线程编程互斥锁和条件变量的简单使用
Linux下的多线程遵循POSIX线程接口,称为pthread.编写Linux下的多线程程序,需要使用头文件pthread.h,链接时需要使用库libpthread.a.线程是进程的一个实体,是CPU ...
最新文章
- 裸centos安装PCRE时报错解决
- 自定义边界_如何批量生成CAD填充的边界?
- Apache Kylin v2.6.1 发布,开源的分布式分析引擎
- oracle 安装oui 15038,SuSE Linux上的Oracle11g-x64-ent安装有许多检查错误
- 抖音快手小视频推荐算法之--协同过滤算法剖析
- 从mysql到大数据(三)--mysql数据库建模一常用数据类型及引擎
- IOS开发之Bug--遇到一个类型不确定的bug
- 信息学奥赛一本通 1159:斐波那契数列
- PAT练习题:D进制的A+B(C++)
- java web service索引
- Smali 语法文档
- 爬取 wallhaven图片到本地壁纸库
- 一个figure存在多个legend:多行多列图例
- android 通过html设置textview的内容不同种颜色
- 良好的代码风格之if else?
- 学习:大文件统计与排序
- linux电脑滚轮不能用,图文详解电脑鼠标滚轮不动了怎么办_电脑鼠标滚轮不能用的三种解决方法-系统城...
- 图扑软件携数字孪生产品与解决方案亮相高交会
- ESP32 下载与烧录最新固件
- lm283_BP283X 最小输入输出压差和OVP电压的关系