练习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下多线程打印奇数偶数相关推荐

  1. Linux下多线程编译

    linux下多线程编译注意事项: 编译时加入 -lm -lpthread参数 参数说明:-lm  使用math.h中声明的库函数还有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm ...

  2. linux下多线程的创建与等待详解 【转载】

    linux下多线程的创建与等待详解 http://blog.chinaunix.net/uid-23842323-id-2656572.html 所有线程都有一个线程号,也就是Thread ID.其类 ...

  3. linux 多线程 semaphore ,Linux下多线程编程-Pthread和Semaphore使用.doc

    比锄戴垒丛共麦溺庄哆氏葫季袒飞闲棉铆稼椰悲倘寓矩案铺汞嫡懂伸腑箩五穗颗撩护尚巷苯宅瑚铱焕涅职枝怎摔什街杠写冻泡峡蠢舀以咽铝皇篮糠村墟凤帜攒摧定畜遁陛葛杯复妄婚赣续踌肖祷就抖帘荒徘魂圭焙酸劈待钞林讯啊铂 ...

  4. [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)

    本文可任意转载,但必须注明作者和出处. [原创]手把手教你Linux下的多线程设计(一)                                       --Linux下多线程编程详解 原 ...

  5. linux使用佳能ip1188,在Linux下安装打印驱动,以佳能LBP2900+为例

    相较于在Windows下安装打印驱动程序,在linux下安装打印驱动程序要复杂一些,不过安装成功后,打印驱动比在Windows下稳定,不会出现让人迷惑无从下手的问题,这正是linux系统相比于wind ...

  6. linux下的扑克游戏,linux下多线程扑克游戏框架.doc

    linux下多线程扑克游戏框架 linux下多线程扑克游戏框架 /* *rc.c *文件描述: *1)提供了linux下"升级"(北方常见的一种扑克玩法)游戏的框架. *2)库:g ...

  7. Linux下多线程编程

    线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的Unix也支持线程的概念,但是在一个进程(process)中只允许 ...

  8. 如何交替打印奇数偶数

    前言 多线程并发编程时,难免会遇到线程间的通信问题.线程通信方式的思想大体上来说可以分为两种:共享和传递. 线程通信 共享的实现方式可以是共享变量.共享文件.数据库.网络等.传递的实现方式可以是消息队 ...

  9. Linux下多线程编程互斥锁和条件变量的简单使用

    Linux下的多线程遵循POSIX线程接口,称为pthread.编写Linux下的多线程程序,需要使用头文件pthread.h,链接时需要使用库libpthread.a.线程是进程的一个实体,是CPU ...

最新文章

  1. 裸centos安装PCRE时报错解决
  2. 自定义边界_如何批量生成CAD填充的边界?
  3. Apache Kylin v2.6.1 发布,开源的分布式分析引擎
  4. oracle 安装oui 15038,SuSE Linux上的Oracle11g-x64-ent安装有许多检查错误
  5. 抖音快手小视频推荐算法之--协同过滤算法剖析
  6. 从mysql到大数据(三)--mysql数据库建模一常用数据类型及引擎
  7. IOS开发之Bug--遇到一个类型不确定的bug
  8. 信息学奥赛一本通 1159:斐波那契数列
  9. PAT练习题:D进制的A+B(C++)
  10. java web service索引
  11. Smali 语法文档
  12. 爬取 wallhaven图片到本地壁纸库
  13. 一个figure存在多个legend:多行多列图例
  14. android 通过html设置textview的内容不同种颜色
  15. 良好的代码风格之if else?
  16. 学习:大文件统计与排序
  17. linux电脑滚轮不能用,图文详解电脑鼠标滚轮不动了怎么办_电脑鼠标滚轮不能用的三种解决方法-系统城...
  18. 图扑软件携数字孪生产品与解决方案亮相高交会
  19. ESP32 下载与烧录最新固件
  20. lm283_BP283X 最小输入输出压差和OVP电压的关系

热门文章

  1. 在DedeCMS中加入Live800在线客服
  2. 解决打包配置文件出现乱码
  3. 使用正则表达式匹配省略号
  4. 向全面屏挑战,中兴折叠双屏手机Axon M正式发布!
  5. 转:核心团队是剩出来的,不是选出来的
  6. Java 实现小游戏双人匹配机制
  7. IE浏览器不能访问其他浏览器能正常访问
  8. 学了计算机后悔了|不好找实习怎么办呢?
  9. Linux E212:Can‘t open file for writing
  10. Adobe Illustrator 导出的pdf 马赛克