阿里中間件筆試題記錄:有三個worker線程:worker1、worker2、worker3。三個線程分別只能輸出1、2、3。請寫出代碼,實現三個線程順序循環輸出123123123...
#include <iostream>
#include <thread>//thread
#include <condition_variable>//condition_variable
#include <vector>
#include <algorithm>//for_each
using namespace std;
mutex mtx;
condition_variable cv;
int printThis = 1;//要輸出的數
int loopTimes = 100;//循環次數
int workersNum = 3;//線程數
void work(int num) {
for (int i = 0; i < loopTimes; i++) {
unique_lock<mutex>ulk(mtx);
cv.wait(ulk, [num] {return num == printThis; });
cout /*<< std::this_thread::get_id() << ":" */<< num/* << endl*/;
printThis = num % workersNum + 1;//轉到下一個線程
ulk.unlock();
cv.notify_all();
}
}
int main() {
vector<thread> workers(workersNum);
for (int i = 1; i <= workersNum; ++i)
workers[i-1] = thread(work, i);
for_each(workers.begin(), workers.end(), mem_fn(&thread::join));
//cout << "完成";
getchar();
return 0;
}