首页 > 代码库 > c++11线程之条件变量condition_variable

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

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

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  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;