目录

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 *)&param);ret = pthread_create(&t2,NULL,func2,(void *)&param);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相关推荐

  1. 线程条件控制实现线程的同步

    与条件变量相关API         条件变量是线程另一可用的同步机制.条件变量给多个线程提供了一个会合的场所.条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生. 条件本身是由互斥 ...

  2. 网络编程9_线程-条件,定时器,队列,线程池, 协程

    线程 一. 条件     使得线程等待,只有满足某条件时,才释放n个线程     import time     from threading import Thread,RLock,Conditio ...

  3. Linux系统编程----15(线程与进程函数之间的对比,线程属性及其函数,线程属性控制流程,线程使用注意事项,线程库)

    对比 进程 线程 fork pthread_create exit (10) pthread_exit (void *) wait (int *) pthread_join (,void **)阻塞 ...

  4. Linux 多线程(二)线程安全:线程安全、互斥与互斥锁、死锁、同步与条件变量

    线程安全 互斥 死锁 同步 线程安全 所谓线程安全,其实就是当多个线程对临界资源进行争抢访问的时,不会造成数据二义或者逻辑混乱的情况(通常情况下对全局变量和静态变量进行操作时在会出现) 常见的线程安全 ...

  5. Linux下的C编程实战(开发平台搭建,文件系统编程,进程控制与进程通信编程,“线程”控制与“线程”通信编程,驱动程序设计,专家问答)

    Linux下的C编程实战(一) ――开发平台搭建 1.引言 Linux操作系统在服务器领域的应用和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性.而近年来,Linux ...

  6. Java20-day11【实现多线程(进程、线程-调度-控制-生命周期)、线程同步(同步代码块、线程安全、Lock)、生产者消费者(模式概述、案例)】

    视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...

  7. linux网络编程之posix 线程(四):posix 条件变量与互斥锁 示例生产者--消费者问题

    http://blog.csdn.net/jnu_simba/article/details/9129939 一.posix 条件变量 一种线程间同步的情形:线程A需要等某个条件成立才能继续往下执行, ...

  8. [Linux]线程概念_线程控制(线程与进程的区别与联系 | 线程创建 | 线程等待 | 线程终止 | 线程分离 | LWP)

    文章目录 线程概念 进程和线程的关系 线程的优点 线程的缺点 线程控制 Linux线程和接口关系的认识 线程创建 线程ID及进程地址空间布局 线程等待 线程终止 线程终止状态 线程分离 LWP和pth ...

  9. java线程条件变量_多线程同步条件变量(转载)

    最近看<UNIX环境高级编程>多线程同步,看到他举例说条件变量pthread_cond_t怎么用,愣是没有看懂,只好在网上找了份代码,跑了跑,才弄明白 #include #include ...

最新文章

  1. 36岁前百度员工哀叹:结婚三年老婆要离婚,要求分走大半财产,并且带走孩子。阴差阳错之下,发现孩子不是自己亲生的!...
  2. WPF中触发器Trigger、MultiTrigger、DataTrigger、MultiDataTrigger、EventTrigger几种
  3. 苹果7【】闪存测试软件,不厚道!iPhone7大容量版竟采用TLC闪存
  4. PMP-【第12章 项目采购管理】-2021-2-17(252页-274页)
  5. javascript的常见对象总结
  6. 安装程序未能打开日志文件_工地开工,安全日志记录这样写才规范!
  7. 陶瓷气体放电管型号大全
  8. Redis数据的类型
  9. 【UML】UML扩展的建模概念
  10. php 错误提示模板,php 关闭错误提示方法总结与性能分析
  11. 2018-2019-2 20165222《网络对抗技术》Exp9 Web安全基础
  12. 使用plsql导出表结构和表数据和存储过程
  13. 怎么才能写好技术文档——这是我的全部经验
  14. 《缠中说禅》炒股经典理论
  15. php13 质粒 cm erm 抗生素,PHP13 会话控制 - osc_c0g7cjrk的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. 云黑系统,浪客云黑3.0,黑名单系统
  17. 祝您健康:抢救脑溢血患者的神奇秘方:针刺十宣穴,涌泉穴
  18. leetcode刷题:292. Nim 游戏(Java)
  19. 《计算机基础知识》读后感300字,计算机应用基础读后感
  20. QChart绘制占比图,但是以时间轴为X轴

热门文章

  1. 计算机网络翻译,COMPUTERNETWORK_计算机网络(英语论文翻译)
  2. Average(牛客暑假训练营第四场)
  3. 学生动漫网页设计模板下载 海绵宝宝大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板 静态HTML网页单页制作 dreamweaver网页设计与制作代码
  4. 现如今java工程师工资高吗
  5. 文件管理 —— 文件存储空间管理
  6. 大IPD之——学习华为让组织能力成为增长的动力(七)
  7. 如何克服短时记忆局限性对于界面的影响
  8. PHP的Imagick拓展安装
  9. 一次小模块的使用过程-LC12S无线模块介绍
  10. 《如何成为一个有趣的人》-王小圈读书笔记