当前位置: 首页 > news >正文

C++ 多线程顺序打印

打印要求:

三个打印线程顺序进行。

线程要求如下:

线程A:打印A

线程B:打印B

线程C:打印C

打印结果:

A
B
C
A
B
C
A
B
C
A
B
C
A
B

法一:需要锁和共享变量

#include <iostream>
#include <thread>
#include <mutex>using std::cout;
using std::endl;
using std::thread;
using std::mutex;
using std::condition_variable;
using std::unique_lock;enum CVFLAG
{INIT,A_DONE,B_DONE,C_DONE
};mutex mtx;
condition_variable cv;
CVFLAG flag = INIT;void printA()
{unique_lock<mutex> lock(mtx);cout << "A" << endl;flag = A_DONE;cv.notify_all();
}void printB()
{unique_lock<mutex> lock(mtx);cv.wait(lock, [] { return flag == 1; });cout << "B" << endl;flag = B_DONE;cv.notify_all();
}void printC()
{unique_lock<mutex> lock(mtx);cv.wait(lock, [] { return flag == 2; });cout << "C" << endl;flag = C_DONE;cv.notify_all();
}int main()
{int i = 0;while (i < 5){thread tA(printA);thread tB(printB);thread tC(printC);tA.join();tB.join();tC.join();++i;}return 0;
}

法二:简单粗暴,调整join的顺序

#include <iostream>
#include <thread>
#include <mutex>using std::cout;
using std::endl;
using std::thread;void printA()
{cout << "A" << endl;
}void printB()
{cout << "B" << endl;
}void printC()
{cout << "C" << endl;
}int main()
{int i = 0;while (i < 5){thread tA(printA);tA.join();thread tB(printB);tB.join();thread tC(printC);tC.join();++i;}return 0;
}

http://www.lryc.cn/news/281356.html

相关文章:

  • x-cmd pkg | duf - df 命令的现代化替代品
  • 202406读书笔记|《沉睡的线条世界》——翻山越岭,只为与你分享点滴的快乐
  • [论文阅读]4DRadarSLAM: A 4D Imaging Radar SLAM System for Large-scale Environments
  • Python: vars()详细解释
  • 2024年1月15日Arxiv最热论文推荐:斯坦福LLM精准微调新框架、GPT不愿承认回答错误、速度快15倍的3D全景分割新突破
  • 1.5 面试经典150题 - 轮转数组
  • Linux的基础命令学习
  • 个人数据备份方案分享(源自一次悲惨经历)
  • SpringBoot教程(八) | SpringBoot统一结果封装
  • Ubuntu 22.04 安装Fail2Ban
  • Ubuntu 22.04 编译安装 Qt mysql驱动
  • Mindspore 公开课 - CodeGeeX
  • 说一下mysql的锁
  • rime中州韵小狼毫 日期/农历 时间 事件 节气 滤镜
  • 【前端】前后端的网络通信基础操作(原生ajax, axios, fetch)
  • Matter - 配置工厂数据(2)
  • 版本控制背景知识
  • tensorflow报错: DNN library is no found
  • DA14531-高级应用篇-用户如何开启OTA服务
  • 国内镜像源配置方法(包括临时和永久方法)
  • 数据结构二叉树--堆(数据结构实现和堆排序的一种实现)
  • 【Linux】 nohup命令使用
  • 多维时序 | Matlab实现GRO-CNN-LSTM-Attention淘金算法优化卷积神经网络-长短期记忆网络结合注意力机制多变量时间序列预测
  • SQL-DQL-基础查询
  • Kubernetes (十三) 存储——持久卷-动静态分配
  • order by之后的injection(sqllabs第四十六关)
  • C++ 树与图的广度优先遍历 || 模版题 :图中点的层次
  • k8s---pod控制器
  • 2024.1.11力扣每日一题——构造有效字符串的最少插入数
  • 软件测试|如何使用Selenium处理隐藏元素