多線程問題,實現三個線程順序循環輸出123123123...

        阿里中間件筆試題記錄:有三個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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章