c++11线程之条件变量condition_variable

题目:子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。

[cpp] view plaincopyprint?

  1. #include<iostream>
  2. #include<thread>
  3. #include<mutex>
  4. #include<condition_variable>
  5. using namespace std;
  6. mutex m;
  7. condition_variable cond;
  8. int flag=10;
  9. void fun(int num){
  10. for(int i=0;i<50;i++){
  11. unique_lock<mutex> lk(m);//A unique lock is an object that manages a mutex object with unique ownership in both states: locked and unlocked.
  12. while(flag!=num)
  13. cond.wait(lk);//在调用wait时会执行lk.unlock()
  14. for(int j=0;j<num;j++)
  15. cout<<j<<" ";
  16. cout<<endl;
  17. flag=(num==10)?100:10;
  18. cond.notify_one();//被阻塞的线程唤醒后lk.lock()恢复在调用wait前的状态
  19. }
  20. }
  21. int main(){
  22. thread child(fun,10);
  23. fun(100);
  24. child.join();
  25. return 0;
  26. }

c++11线程之条件变量condition_variable

时间: 2024-11-04 06:49:29

c++11线程之条件变量condition_variable的相关文章

c++11线程之条件变量condition_variable(二)

题目:编写一个程序,开启3个线程,这3个线程的ID分别为A.B.C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示:如:ABCABC-.依次递推. 采用C++11实现: [cpp] view plaincopyprint? #include<iostream> #include<thread> #include<mutex> #include<condition_variable> using namespace std; mut

C++11并行编程-条件变量(condition_variable)详细说明

<condition_variable >头文件主要包含有类和函数相关的条件变量. 包括相关类 std::condition_variable和 std::condition_variable_any,还有枚举类型std::cv_status.另外还包含函数 std::notify_all_at_thread_exit(),以下分别介绍一下以上几种类型. std::condition_variable 类介绍 std::condition_variable是条件变量,很多其它有关条件变量的定义

C++11并发编程-条件变量(condition_variable)详解

<condition_variable >头文件主要包含了与条件变量相关的类和函数.相关的类包括 std::condition_variable和 std::condition_variable_any,还有枚举类型std::cv_status.另外还包括函数 std::notify_all_at_thread_exit(),下面分别介绍一下以上几种类型. std::condition_variable 类介绍 std::condition_variable是条件变量,更多有关条件变量的定义参

C++ 11 并发: 正确 的使用条件变量-condition_variable

1. 标准实例 http://en.cppreference.com/w/cpp/thread/condition_variable 在cppreference提供的对 cv的例子,condition_variable和mutex都是全局变量.但是我们的程序不可能到处使用全局变量.如果把condition_variable和mutex的定义放到main函数中进去,作为局部变量,并且循环几次,会发现第一次同步OK,后面的就没有那么好的运气了. 因此对于局部变量中如何正确的使用condition_v

linux系统编程:线程同步-条件变量(cond)

线程同步-条件变量(cond) 生产者与消费者问题 再引入条件变量之前,我们先看下生产者和消费者问题:生产者不断地生产产品,同时消费者不断地在消费产品. 这个问题的同步在于两处:第一,消费者之间需要同步:同一件产品只可由一人消费.第二,当无产品可消费时,消费者需等待生产者生产后,才可继续消费,这又是一个同步问题.详细了解:生产者消费者问题. 条件变量 条件变量是利用线程间共享的全局变量进行同步的一种机制,并且条件变量总是和互斥锁结合在一起. 相关函数 pthread_cond_t //条件变量类

pThread线程(三) 线程同步--条件变量

条件变量(Condition Variables) 参考资料:http://game-lab.org/posts/posix-thread-cn/#5.1 条件变量是什么? 条件变量为我们提供了另一种线程间同步的方法,然而,互斥量是通过控制线程访问数据来实现同步,条件变量允许线程同步是基于实际数据的值. 如果没有条件变量,程序员需要让线程不断地轮询,以检查是否满足条件.由于线程处在一个不间断的忙碌状态,所以这是相当耗资源的.条件变量就是这么一个不需要轮询就可以解决这个问题的方法. 条件变量总是跟

linux网络编程-----&gt;线程同步--&gt;条件变量

开发使用多线程过程中, 不可避免的会出现多个线程同时操作同一块共享资源, 当操作全部为读时, 不会出现未知结果, 一旦当某个线程操作中有写操作时, 就会出现数据不同步的事件. 而出现数据混乱的原因: 资源共享(独享资源则不会) 调试随机(对数据的访问会出现竞争) 线程间缺少必要的同步机制 以上三点, 前两点不能被改变. 欲提高效率, 传递数据, 资源必须共享. 只要资源共享, 就一定会出现线程间资源竞争, 只要存在竞争关系, 数据就会出现混乱. 所以只能从第三点着手, 使多个线程在访问共享资源的

线程同步-条件变量

条件变量的使用:将互斥量的忙等机制改为通知机制 涉及到的函数有以下几个: int pthread_cond_destroy(pthread_cond_t *cond); /********************** *功能:条件变量的初始化 *参数:cond:条件变量 * attr:条件变量的属性 * ********************/ int pthread_cond_init(pthread_cond_t *restrict cond , const pthread_condatt

线程同步——条件变量

1.互斥量的存在问题:     互斥量是线程程序必需的工具,但它们并非万能的.例如,如果线程正在等待共享数据内某个条件出现,那会发生什么呢?它可以重复对互斥对象锁定和解锁,每次都会检查共享数据结构,以查找某个值.但这是在浪费时间和资源,而且这种繁忙查询的效率非常低. 在每次检查之间,可以让调用线程短暂地进入睡眠,比如睡眠三秒钟,但是因此线程代码就无法最快作出响应.真正需要的是这样一种方法:当线程在等待满足某些条件时使线程进入睡眠状态.一旦条件满足,就唤醒因等待满足特定条件而睡眠的线程.如果能够做