多线程顺序打印输出数据
Posted 清水寺扫地僧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程顺序打印输出数据相关的知识,希望对你有一定的参考价值。
同花顺技术面手撕代码题,考察线程同步的实现。
题目:
有三个线程,编号分别为①②③,其中
①线程打印1,4,7,10,...;
②线程打印2,5,8,11,...;
③线程打印3,6,9,12,...;
如何编程,使得在STDOUT中的输出是顺序的,即输出是
1,2,3,4,5,6,7,8,9,...,100
题解:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <Windows.h>
using namespace std;
mutex mtx;
int idx;
void print_idx(bool (*isTurn)(int)) { //作为启动线程的句柄,
while (1) {
mtx.lock();
if (idx > 100) break;
if (isTurn(idx)) {
cout << idx << " ";
idx++;
}
mtx.unlock();
}
}
bool thd1_judge(int a) { return 1 == a % 3; } //判断是否是①线程
bool thd2_judge(int a) { return 2 == a % 3; } //判断是否是②线程
bool thd3_judge(int a) { return 0 == a % 3; } //判断是否是③线程
int main() {
idx = 1; //初始化全局共享变量
thread thd1 = thread(print_idx, thd1_judge); //启动线程,分别是入口函数和
thread thd2 = thread(print_idx, thd2_judge); //入口函数参数
thread thd3 = thread(print_idx, thd3_judge);
thd1.join(); //回收线程
thd2.join();
thd3.join();
return 0;
}
题解当中的thdx_judge
作为函数参数,即函数指针参数的用法,可见剑指Offer当中面试题21:调整数组顺序使奇数位于偶数前面。
输出结果:
以上是关于多线程顺序打印输出数据的主要内容,如果未能解决你的问题,请参考以下文章