多线程问题,实现三个线程顺序循环输出123123123...

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_39088557/article/details/80991618

        阿里中间件笔试题记录:有三个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;
}

猜你喜欢

转载自blog.csdn.net/sinat_39088557/article/details/80991618