Linux多线程信号量控制手段!
一. Linux多线程DEMO介绍:
本次的DEMO是对多线程知识点的回顾,因为多线程技术在我们平常开发中经常用到。这次的DEMO是通过发送信号量去控制线程的运行和停止。相当于我们通过输入一个指令让某个线程启动和停止。
二. 整个DEMO的流程框图
三.整个DEMO的代码模块
3.1. process1_thread、process2_thread线程的讲解:
process1_thread线程和process2_thread线程,分别用blocking_thread_wait函数进行阻塞。相当于这两个线程默认是挂起阻塞起来,然后等着input_monitor线程发送指令。process1_thread线程主要由g_blocking_thread_01变量去控制它的运行状态,process21_thread线程则是由g_blocking_thread_02变量去控制它的运行状态。
3.2. input_monitor线程的讲解:
input_monitor线程的主要用途是,发送指令去操控process1_thread线程和process2_thread线程的运行。input_monitor总共可以操控四个指令分别是:start_01指令、stop_01指令、start_02指令、stop_02指令。
start_01指令:主要是利用blocking_thread_start去启动process_thread1线程,此时process1_thread线程将会不断打印Process1_Thread字段。
stop_01指令:主要是利用blocking_thread_stop去启动process_thread1线程,此时process1_thread线程将会停止打印Process1_Thread字段。
start_02指令:主要是利用blocking_thread_start去启动process_thread2线程,此时process2_thread线程将会不断打印Process02_Thread字段。
stop_02指令:主要是利用blocking_thread_stop去启动process_thread2线程,此时process2_thread线程将会停止打印Process2_Thread字段。
3.3. 线程控制模块blocking_thread_unit.c的讲解:
blocking_thread_unit.c分别有三个函数,分别是: blocking_thread_wait、blocking_thread_start、blocking_thread_stop。
blocking_thread_wait主要功能是:等待线程阻塞,若收到的count一直是0则会一直阻塞在那里,若收到一个非0的值则会解除阻塞,让线程往下走。使用的api是pthread_cond_wait线程等待函数。
blocking_thread_start主要功能是:开启对应的线程,把线程的count设置成1,并且使用pthread_cond_broadcast去通知对应的线程,要开始线程的打印。
blocking_thread_stop主要功能是:停止对应的线程,把线程的count设置成0,并且使用pthread_cond_broadcast去通知对应的线程,要停止线程的打印。
g_blocking_thread_01和g_blocking_thread_02两个全局变量的讲解:
这里的控制线程主要用到了两个全局变量对两个线程进行控制,分别是g_blocking_thread_01和g_blocking_thread_02。g_blocking_thread_01主要是控制process1_thread线程的停止和开启,g_blocking_thread_02主要是控制process2_thread线程的开启和停止。
四.整个DEMO工程的代码:
相关文章
- 使用 pt-query-digest 分析 RDS MySQL 慢查询日志
- AWS云上混沌工程实践之启动篇
- 为 AWS RoboMaker 构建和捆绑 ROS 应用程序
- 新增功能 – AWS Deep Learning Containers
- Java_day5
- 新推出 – AWS Application Load Balancer 的高级请求路由
- 新的 AMD EPYC 支持的 Amazon EC2 M5ad 和 R5ad 实例
- rabbitmq-python使用教程
- 使用 Elasticsearch OSS 构建和运行 Open Distro For Elasticsearch SQL 插件
- 更改 Open Distro for Elasticsearch 中的 Admin 密码
- 使用 Rancher 管理 EKS 集群
- 启动并运行 Open Distro for Elasticsearch
- 使用 Amazon EC2 M5 和 R5 实例提升 Amazon ElastiCache 性能
- 新推 – 适用于 Amazon Direct Connect 的千兆位连接选项
- 将 AWS IAM Authenticator 部署到 kops
- Western Digital HDD 云级模拟 – 250 万个 HPC 任务,4 万个 EC2 Spot 实例
- 使用AWS Sagemaker部署的终端节点进行推荐预测的常用场景
- 使用 Terraform 在 AWS 中国区域实现自动化部署指南系列(二) TERRAFORM 进阶
- AWS 精英:让 AWS 安全服务为您服务
- 在 Amazon EKS 上使用 Open Policy Agent