Linux线程条件控制实现线程的同步pthread_cond_init、pthread_cond_destroy、pthread_cond_wait、pthread_cond_signal
目录
1、什么是条件变量
2、条件变量相关的API
(1)创建条件变量
(2)pthread_cond_init()___初始化条件变量
(3)pthread_cond_destroy()___销毁条件变量
(4)pthread_cond_wait()___等待条件变量
(5)pthread_cond_signal()___触发条件变量
创建条件变量编程实战
3、测试条件变量小妙招
1、什么是条件变量
条件变量是线程另一可用的同步机制。条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。
2、条件变量相关的API
(1)创建条件变量
此创建的条件变量为全局变量
方法一(动态初始化):pthread_cond_t cond;
方法二(静态初始化):pthread_cond_t cond = PTHREAD_COND_INITIALIZER;如果用第二种方法,就不用在main函数里写pthread_cond_init()了
(2)pthread_cond_init()___初始化条件变量
#include <pthread.h>
int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);pthread_cond_t *restrict cond: 条件变量的地址
const pthread_condattr_t *restrict attr: 条件变量的属性,默认写NULL// 返回:若成功返回0,否则返回错误编号
(3)pthread_cond_destroy()___销毁条件变量
#include <pthread.h>
int pthread_cond_destroy(pthread_cond_t cond);pthread_cond_t cond: 条件变量的地址// 返回:若成功返回0,否则返回错误编号
(4)pthread_cond_wait()___等待条件变量
#include <pthread.h>
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);pthread_cond_t *restrict cond: 条件变量的地址
pthread_mutex_t *restrict mutex: 互斥锁的地址// 返回:若成功返回0,否则返回错误编号
(5)pthread_cond_signal()___触发条件变量
#include <pthread.h>
int pthread_cond_signal(pthread_cond_t cond); 函数将唤醒等待该条件的某个线程
int pthread_cond_broadcast(pthread_cond_t cond); 函数将唤醒等待该条件的所有进程pthread_cond_t cond: 条件变量的地址
// 返回:若成功返回0,否则返回错误编号
创建条件变量编程实战
新建demo9.c文件
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>int g_data = 0;
pthread_cond_t cond; //创建一个条件变量
pthread_mutex_t mutex;
void *func1(void *arg){printf("t1:%ld thread is create\n",(unsigned long)pthread_self());printf("t1:param is %d\n",*((int *)arg));while(1){pthread_cond_wait(&cond,&mutex); //等待条件变量printf("t1 quit =============================\n");printf("t1:%d\n",g_data);g_data = 0;sleep(1);}
}
void *func2(void *arg){printf("t2:%ld thread is create\n",(unsigned long)pthread_self());printf("t2:param is %d\n",*((int *)arg));while(1){printf("t2:%d\n",g_data);pthread_mutex_lock(&mutex);g_data++;if(g_data == 3){pthread_cond_signal(&cond); //触发一个条件变量}pthread_mutex_unlock(&mutex);sleep(1);}
}int main(){int ret;int param = 100;pthread_t t1;pthread_t t2;pthread_mutex_init(&mutex,NULL);pthread_cond_init(&cond,NULL); //初始化条件变量ret = pthread_create(&t1,NULL,func1,(void *)¶m);ret = pthread_create(&t2,NULL,func2,(void *)¶m);pthread_join(t1,NULL);pthread_join(t2,NULL);pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond); //销毁条件变量return 0;}
执行结果:
3、测试条件变量小妙招
(1)新建一个ceshi.c文件
#include <stdio.h>
int main(int argc,char **argv){int i=0;int time = atoi(argv[1]);for(i=0;i<time;i++){system("./demo9");}return 0;
}
(2)让ceshi.c文件,去执行demo9的程序,然后把执行出来的结果打印到另一个文件中
demo9程序是怎么来的:gcc demo9.c -pthread -o demo9
执行命令:./a.out 5 >>789.txt &
>> 指追加的意思
& 取地址,意思是在后台运行
789.txt 指另外一个文件
(3)打开789.txt,测试结果显示
Linux线程条件控制实现线程的同步pthread_cond_init、pthread_cond_destroy、pthread_cond_wait、pthread_cond_signal相关推荐
- 线程条件控制实现线程的同步
与条件变量相关API 条件变量是线程另一可用的同步机制.条件变量给多个线程提供了一个会合的场所.条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生. 条件本身是由互斥 ...
- 网络编程9_线程-条件,定时器,队列,线程池, 协程
线程 一. 条件 使得线程等待,只有满足某条件时,才释放n个线程 import time from threading import Thread,RLock,Conditio ...
- Linux系统编程----15(线程与进程函数之间的对比,线程属性及其函数,线程属性控制流程,线程使用注意事项,线程库)
对比 进程 线程 fork pthread_create exit (10) pthread_exit (void *) wait (int *) pthread_join (,void **)阻塞 ...
- Linux 多线程(二)线程安全:线程安全、互斥与互斥锁、死锁、同步与条件变量
线程安全 互斥 死锁 同步 线程安全 所谓线程安全,其实就是当多个线程对临界资源进行争抢访问的时,不会造成数据二义或者逻辑混乱的情况(通常情况下对全局变量和静态变量进行操作时在会出现) 常见的线程安全 ...
- Linux下的C编程实战(开发平台搭建,文件系统编程,进程控制与进程通信编程,“线程”控制与“线程”通信编程,驱动程序设计,专家问答)
Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来,Linux ...
- Java20-day11【实现多线程(进程、线程-调度-控制-生命周期)、线程同步(同步代码块、线程安全、Lock)、生产者消费者(模式概述、案例)】
视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg 提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...
- linux网络编程之posix 线程(四):posix 条件变量与互斥锁 示例生产者--消费者问题
http://blog.csdn.net/jnu_simba/article/details/9129939 一.posix 条件变量 一种线程间同步的情形:线程A需要等某个条件成立才能继续往下执行, ...
- [Linux]线程概念_线程控制(线程与进程的区别与联系 | 线程创建 | 线程等待 | 线程终止 | 线程分离 | LWP)
文章目录 线程概念 进程和线程的关系 线程的优点 线程的缺点 线程控制 Linux线程和接口关系的认识 线程创建 线程ID及进程地址空间布局 线程等待 线程终止 线程终止状态 线程分离 LWP和pth ...
- java线程条件变量_多线程同步条件变量(转载)
最近看<UNIX环境高级编程>多线程同步,看到他举例说条件变量pthread_cond_t怎么用,愣是没有看懂,只好在网上找了份代码,跑了跑,才弄明白 #include #include ...
最新文章
- 36岁前百度员工哀叹:结婚三年老婆要离婚,要求分走大半财产,并且带走孩子。阴差阳错之下,发现孩子不是自己亲生的!...
- WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种
- 苹果7【】闪存测试软件,不厚道!iPhone7大容量版竟采用TLC闪存
- PMP-【第12章 项目采购管理】-2021-2-17(252页-274页)
- javascript的常见对象总结
- 安装程序未能打开日志文件_工地开工,安全日志记录这样写才规范!
- 陶瓷气体放电管型号大全
- Redis数据的类型
- 【UML】UML扩展的建模概念
- php 错误提示模板,php 关闭错误提示方法总结与性能分析
- 2018-2019-2 20165222《网络对抗技术》Exp9 Web安全基础
- 使用plsql导出表结构和表数据和存储过程
- 怎么才能写好技术文档——这是我的全部经验
- 《缠中说禅》炒股经典理论
- php13 质粒 cm erm 抗生素,PHP13 会话控制 - osc_c0g7cjrk的个人空间 - OSCHINA - 中文开源技术交流社区...
- 云黑系统,浪客云黑3.0,黑名单系统
- 祝您健康:抢救脑溢血患者的神奇秘方:针刺十宣穴,涌泉穴
- leetcode刷题:292. Nim 游戏(Java)
- 《计算机基础知识》读后感300字,计算机应用基础读后感
- QChart绘制占比图,但是以时间轴为X轴
热门文章
- 计算机网络翻译,COMPUTERNETWORK_计算机网络(英语论文翻译)
- Average(牛客暑假训练营第四场)
- 学生动漫网页设计模板下载 海绵宝宝大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板 静态HTML网页单页制作 dreamweaver网页设计与制作代码
- 现如今java工程师工资高吗
- 文件管理 —— 文件存储空间管理
- 大IPD之——学习华为让组织能力成为增长的动力(七)
- 如何克服短时记忆局限性对于界面的影响
- PHP的Imagick拓展安装
- 一次小模块的使用过程-LC12S无线模块介绍
- 《如何成为一个有趣的人》-王小圈读书笔记