这里用到了条件变量。对于条件变量,它的作用是可以调度各个进程阻塞或者唤醒。每个条件变量都有两个操作:wait和signal。wait操作可以把自身进程放于等待队列中,并且紧急等待队列非空的情况下可以唤醒第一个等待者。signal可以唤醒等待队列进程中的第一个等待者,然后本进程进入紧急等待队列的末尾。

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<pthread.h>#define COUNT 20
static  int   i = 1;pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
//分别是偶数和奇数的信号量
pthread_cond_t  even  = PTHREAD_COND_INITIALIZER;
pthread_cond_t  uneven = PTHREAD_COND_INITIALIZER;//打印奇数的
void* funA(void*)
{while(i <= COUNT){//进入临界区之前先加锁pthread_mutex_lock(&mutex);if(i % 2 != 0){printf("funA : %d\n",i);++i;//可以唤醒等待队列中的偶数修改线程pthread_cond_signal(&even);}else{//如果不是的话则需要等待pthread_cond_wait(&uneven, &mutex);} //去掉锁  pthread_mutex_unlock(&mutex);}
}
//打印偶数的
void* funB(void*)
{while(i <= COUNT){pthread_mutex_lock(&mutex);if(i % 2 == 0){printf("funB : %d\n",i);++i;pthread_cond_signal(&uneven);}else{pthread_cond_wait(&even, &mutex);}pthread_mutex_unlock(&mutex);}
}int main()
{pthread_t tid1, tid2;pthread_create(&tid1, NULL, funA, NULL);pthread_create(&tid2, NULL, funB, NULL);pthread_join(tid1, NULL);pthread_join(tid2, NULL);return 0;
}

双线程交替修改变量 条件变量相关推荐

  1. posix多线程有感--线程高级编程(条件变量)

    1.初始化条件变量pthread_cond_init int pthread_cond_init(pthread_cond_t *cv,const pthread_condattr_t *cattr) ...

  2. 线程池中使用条件变量和信号量的性能比较

    2019独角兽企业重金招聘Python工程师标准>>> 面试的时候经常被问到互斥量,条件变量和信号量之间的问题.比如前几天华为面试就被问到互斥量和信号量的区别,说到互斥量也可以使用一 ...

  3. Java线程:新特征-条件变量(转)

    条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量.但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义. 这里的条件和 ...

  4. Java线程详解(16)-条件变量

    条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量.但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义. 这里的条件和 ...

  5. python 线程超时设置_python 条件变量Condition(36)

    文章首发微信公众号,微信搜索:猿说python 对于线程与线程之间的交互我们在前面的文章已经介绍了 python 互斥锁Lock / python事件Event , 今天继续介绍一种线程交互方式 – ...

  6. Java线程:新特征-条件变量

    转自:https://blog.51cto.com/lavasoft/222536 转载于:https://www.cnblogs.com/sharpest/p/10557613.html

  7. java 双线程交替,Java 创建两个线程,和主线程交替运行。

    原来线程都有自己默认的名称. Thread-编号 该编号从0开始. static Thread currentThread():获取当前线程对象. getName(): 获取线程名称. 设置线程名称: ...

  8. c++ linux 线程等待与唤醒_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...

    为什么要线程同步? 线程间有很多共享资源,都对一个共享数据读写操作,线程操作共享资源的先后顺序不确定,可能会造成数据的冲突 看一个例子 两个线程屏行对全局变量count++ (采用一个val值作为中间 ...

  9. linux线程同步(2)-条件变量

    一.概述                                                    上一篇,介绍了互斥量.条件变量与互斥量不同,互斥量是防止多线程同时访问共享的互斥变量来保 ...

最新文章

  1. Java 学习(20)--异常 /  IO 流
  2. 十大经典排序算法动画与解析
  3. 声明式事务控制的实现
  4. linux学习一个服务(未完)
  5. scala java抽象理解_scala – 抽象覆盖如何在Java代码方面起作用?
  6. Texpad for Mac(LaTeX编辑器软件)
  7. [LeetCode]129. Sum Root to Leaf Numbers路径数字求和
  8. 一个学习PCI Express的 不错去处
  9. 外贸沟通中,老外最喜欢的聊天工具你了解?各国客户最常用的即时聊天APP整理及配套8个英语类工具推荐
  10. Hystrix原理介绍:服务雪崩、断路器、服务降级、资源隔离-《Spring Cloud微服务架构进阶》读书笔记
  11. SQLServer数据库日志处理
  12. 单片机蜂鸣器发出叮咚c语言程序,单片机门铃程序设计 按键按下触发蜂鸣器门铃“叮咚”响...
  13. UnboundLocalError: local variable ‘count‘ referenced before assignment
  14. Windows10官网原版系统下载地址汇总
  15. 企业抖音蓝V怎么认证?申请流程是怎样的?需要具备哪些条件?
  16. asp.net使用Aspose.Cells实现excel预览
  17. Excel的二级级联以及多级级联的实现
  18. 基于Plupload的图片压缩上传
  19. 王子救公主 (计蒜客)一道简单DFS
  20. 100部好看的校园喜剧片(可练习英文)+美国校园青春励志电影+25部口语练习电影+20部最浪漫电影

热门文章

  1. 零基础学python实战-零基础学习python_类和对象(36-40课)
  2. 自学python免费教材-python零基础自学教材
  3. python做excel自动化-Python如何控制Excel实现自动化办公
  4. python爬虫从入门到放弃-python爬虫从入门到放弃(七)之 PyQuery库的使用
  5. 怎么自学python-结合学习经历,谈一谈如何学习Python
  6. python适合自学编程吗-对于0基础的人,直接学 Python 编程合适吗?
  7. python自动化办公都能做什么-盘点使用Python进行自动化办公所需要的知识点
  8. python程序员月薪-据说做Python程序员,都月薪上万?
  9. java aes javascript_Java已有AES加解密,现需要前端Javascript加密调接口,返回的数据需要解密,目前互通不了,找不到原因...
  10. shiro 不过滤指定的带参数url_原创干货 | 过滤器设计缺陷导致权限绕过