c++|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++|c++多线程交替打印、条件变量、锁】程序运行结果截图:
c++|c++多线程交替打印、条件变量、锁
文章图片

    推荐阅读