Linux 多线程编程—使用条件变量实现循环打印

简介: 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。 使用条件变量来实现:   1 #include 2 #include 3 #include 4 st...

编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。

使用条件变量来实现:

 

 1 #include <pthread.h>
 2 #include <stdio.h>
 3 #include <unistd.h>
 4 static pthread_mutex_t mtx=PTHREAD_MUTEX_INITIALIZER;
 5 
 6 static pthread_cond_t condA ;
 7 static pthread_cond_t condB ;
 8 static pthread_cond_t condC ;
 9 
10 
11 void* threadA(void *arg)
12 {
13 int a =10;
14 while(a--)
15 {
16 //sleep(2);
17 //printf("A begin.\n");
18 pthread_mutex_lock(&mtx);
19 //printf("A wait.\n");
20 pthread_cond_wait(&condC,&mtx);
21 printf("A.\n");
22 pthread_mutex_unlock(&mtx);
23 pthread_cond_signal(&condA);
24 }
25 }
26 
27 void* threadB(void *arg)
28 {
29 int b=10;
30 while(b--)
31 {
32 //sleep(2);
33 //printf("B begin.\n");
34 pthread_mutex_lock(&mtx);
35 //printf("B wait.\n");
36 pthread_cond_wait(&condA,&mtx);
37 printf("B.\n");
38 pthread_mutex_unlock(&mtx);
39 pthread_cond_signal(&condB);
40 }
41 }
42 
43 void* threadC(void *arg)
44 
45 {
46 int c=10;
47 while(c--)
48 {
49 //sleep(2);
50 //printf("C begin.\n");
51 pthread_mutex_lock(&mtx);
52 //printf("C wait.\n");
53 pthread_cond_wait(&condB,&mtx);
54 printf("C.\n");
55 pthread_mutex_unlock(&mtx);
56 pthread_cond_signal(&condC);
57 }
58 }
59 int main (void *arg)
60 {
61 pthread_t tidA;
62 pthread_t tidB;
63 pthread_t tidC;
64 pthread_cond_init(&condA,NULL);
65 pthread_cond_init(&condB,NULL);
66 pthread_cond_init(&condC,NULL);
67 pthread_create(&tidA,NULL,&threadA,NULL);
68 pthread_create(&tidB,NULL,&threadB,NULL);
69 pthread_create(&tidC,NULL,&threadC,NULL);
70 
71 printf("main begin..\n");
72 sleep(4);
73 pthread_cond_signal(&condC);
74 
75 pthread_join(tidA,NULL);
76 pthread_join(tidB,NULL);
77 pthread_join(tidC,NULL);
78 
79 return 0;
80 }

 


作者: HarlanC

博客地址: http://www.cnblogs.com/harlanc/
个人博客: http://www.harlancn.me/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接

如果觉的博主写的可以,收到您的赞会是很大的动力,如果您觉的不好,您可以投反对票,但麻烦您留言写下问题在哪里,这样才能共同进步。谢谢!

目录
相关文章
|
7月前
|
安全 算法 Ubuntu
Linux(openssl)环境:编程控制让证书自签的技巧。
总结:在Linux环境中,OpenSSL是一个非常实用的工具,可以帮助我们轻松地生成自签名证书。通过上述三个简单步骤,即可为内部网络、测试环境或开发环境创建自签名证书。但在公共访问场景下,建议购买经过权威认证机构签发的证书,以避免安全警告。
316 13
|
9月前
|
JavaScript Ubuntu Linux
如何在阿里云的linux上搭建Node.js编程环境?
本指南介绍如何在阿里云Linux服务器(Ubuntu/CentOS)上搭建Node.js环境,包含两种安装方式:包管理器快速安装和NVM多版本管理。同时覆盖全局npm工具配置、应用部署示例(如Express服务)、PM2持久化运行、阿里云安全组设置及外部访问验证等步骤,助你完成开发与生产环境的搭建。
|
10月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
195 26
|
10月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
194 17
|
12月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
521 13
|
12月前
|
Java 程序员 调度
【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)
创建线程的五种方式,Thread常见方法(守护进程.setDaemon() ,isAlive),start和run方法的区别,如何提前终止一个线程,标志位,isinterrupted,变量捕获
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
安全 Linux
Linux线程(十一)线程互斥锁-条件变量详解
Linux线程(十一)线程互斥锁-条件变量详解
|
消息中间件 存储 缓存
【嵌入式软件工程师面经】Linux系统编程(线程进程)
【嵌入式软件工程师面经】Linux系统编程(线程进程)
308 1
|
Linux 调度 数据库
Linux下的系统编程——线程同步(十三)
Linux下的系统编程——线程同步(十三)
258 0
Linux下的系统编程——线程同步(十三)

热门文章

最新文章