c++多线程交替打印、条件变量、锁

主要知识——多线程,条件变量,锁。

 

这里其实有一个难点,当然可以在看了代码之后再回头来看,就是对std::condition_variable::wait方法的理解。

这里解释一下,当执行wait方法时,锁是会被解开的以便别的线程使用资源,但是调用wait的线程会被阻塞直到别的线程调用notify等一系列方法,然后调用wait的线程会再次获取锁,用代码来表示就是:

//cv是条件变量,mtx为互斥量
unique_lock lock(mtx);
cv(lock)
cv.wait();

//cv.wait相当于
lock.unlock();
xxxxx//此刻即真正阻塞等待notify
lock.lock();

当然本例中还包含其他一些知识点,譬如unique_lock和lock_gurad的区别?thread的join函数?当然这些都是比较简单的,但是不能忘记这些基础。

具体的代码如下:


#include 
#include 
#include 
#include 


std::mutex mtx;

std::condition_variable cv_a,cv_b;
bool printAFlag = true;

void func1(){
    std::unique_lock lock(mtx);
    for(int i=0;i<20;i++){
        while(!printAFlag)
            cv_a.wait(lock);
        printAFlag=!printAFlag;
        std::cout<<"a"< lock(mtx);
    for(int i=0;i<20;i++){
        while(printAFlag)
            cv_b.wait(lock);
        printAFlag=!printAFlag;
        std::cout<<"b"<

程序运行结果截图:

c++多线程交替打印、条件变量、锁_第1张图片

你可能感兴趣的:(c++,STL)