题目描述
编写一个程序,开启三个线程,这三个线程按照顺序依次打印ABC,每个字母打印10次后结束,最后结果如 ABCABCABC… 依次递推
题目解析
#include<bits/stdc++.h>
using namespace std;
std::mutex mtx;
std::condition_variable cv;
char arr[] = {'a', 'b', 'c'};
char message = 'a';
void test(int i){
for (int j = 0; j < 10; ++j) {
std::unique_lock<std::mutex> lk(mtx);
cv.wait(lk, [=]{ return message == arr[i];});
std::cout << arr[i];
message = arr[(i + 1) % 3];
lk.unlock();
cv.notify_all();
}
}
int main(int argc, char **argv)
{
std::thread t[3];
for (int i = 0; i < 3; ++i) {
t[i] = std::thread(test, i);
}
for (int i = 0; i < 3; ++i) {
t[i].join();
}
}