方法一:使用一个条件变量进行同步
使用C++11的标准方法一:线程语法,用一个全局变量state控制条件变量的wait()阻塞等待时机,用notify_all()唤醒条件变量。
具体的代码如下,3个线程分别打印ABC,循环10次:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
int state = 0; //全局变量
mutex m; //全局变量
condition_variable cv; //全局变量
void func1() {
unique_lock<mutex> lk(m);
for (int i = 0; i < 10; i++) {
while (state != 0)
cv.wait(lk);
cout << "a";
state++;
i++;
cv.notify_all();
}
}
void func2() {
unique_lock<mutex> lk(m);
for (int i = 0; i < 10; i++) {
while (state != 1)
cv.wait(lk);
cout << "b";
state++;
i++;
cv.notify_all();
}
}
void func3() {
unique_lock<mutex> lk(m);
for (int i = 0; i < 10;