#include <iostream>
#include <mutex>
#include <thread>
#include <condition_variable>
class Test {
public:
void printThreadID(int x) {
for (int i=0; i<10; ++i) {
std::unique_lock<std::mutex> lock(mMutex);
while(x != flag) {
mConVar.wait(lock);
}
std::cout << static_cast<char>('A' + flag) << " ";
flag = (flag+1) % 3;
mConVar.notify_all();
}
}
private:
int flag = 0;
std::mutex mMutex;
std::condition_variable mConVar;
};
int main() {
Test ts;
std::thread mThresd1(&Test::printThreadID, &ts, 1);
std::thread mThresd2(&Test::printThreadID, &ts, 2);
ts.printThreadID(0);
mThresd1.join();
mThresd2.join();
std::cout << std::endl;
return 0;
}
运行结果: