首页 > 其他分享 >使用三个线程交替打印ABC

使用三个线程交替打印ABC

时间:2024-03-29 11:47:51浏览次数:21  
标签:ABC int 打印 lk flag 线程 mutex include cv

//用的是线程、互斥锁、条件变量

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>

using namespace std;

mutex _mutex;			//定义锁变量
condition_variable cv;			//定义条件变量
int flag = 0;			//切换线程的标识符,flag:0-2分别对应A-B

void printa() {
	unique_lock<mutex> lk(_mutex);		//加锁为了保护flag能被正确访问
	for (int i = 0; i < 10; i++) {
		while (flag != 0) cv.wait(lk);
		cout << "A" << endl;
		flag = 1;
		cv.notify_all();
	}
	cout << "thread 1 print A finish" << endl;
}

void printb() {
	unique_lock<mutex> lk(_mutex);
	for (int i = 0; i < 10; i++) {
		while (flag != 1) cv.wait(lk);
		cout << "B" << endl;
		flag = 2;
		cv.notify_all();
	}
	cout << "thread 2 print B finish" << endl;
}

void printc() {
	unique_lock<mutex> lk(_mutex);
	for (int i = 0; i < 10; i++) {
		while (flag != 2) cv.wait(lk);
		cout << "C" << endl;
		flag = 0;
		cv.notify_all();
	}
	cout << "thread 3 print C finish" << endl;
}

int main() {
	thread th1(printa);
	thread th2(printb);
	thread th3(printc);

	th1.join();
	th2.join();
	th3.join();

	cout << "print all finish" << endl;
}

标签:ABC,int,打印,lk,flag,线程,mutex,include,cv
From: https://www.cnblogs.com/fly-smart/p/18103467

相关文章

  • 虚拟线程知识分享
    1相关概念-操作系统线程(operatingsystemthreads):即硬件设备配备的线程,一般和服务器硬件的核心数量,例如interCPU的大核拥有两个操作系统线程,小核拥有一个操作系统线程。云服务器的线程数一般和服务器配置上的核心数量相同。-平台线程(PaltformThread):java.lang.Th......
  • c语言例题,逐个打印数字
    今天来分享个比较简单的程序例题,也是比较经典的一个新手例题,逐个打印输入的数字。我们直接从主函数看起,先定义一个num变量,同时变量的类型是unsignedint,这个类型的意思是无符号的整型变量,unsigned(无符号)是用来修饰int的,说明了num这个变量只能是正数,然后我们用scanf输入想要的数......
  • 线程池详解
    线程回顾创建一个线程需要做如下两件事:继承Thread实现RunnablepublicvoidTest(){ Threadthread=newThread(newMyrunnable());thread.start();}staticclassMyRunnableimplementsRunnable{@Overridepublicvoidrun(){......
  • 【Linux】线程同步{死锁/线程同步相关接口/由浅入深理解线程同步}
    文章目录1.死锁1.1概念1.2死锁的必要条件2.线程同步相关接口2.1pthread_cond_init/destroy()2.2intpthread_cond_wait2.3linux下的条件变量及其作用2.4intpthread_cond_signal/broadcast();2.5Linux下阻塞和挂起的异同2.6阻塞,挂起,和进程切换的关系3.由浅入深理解线......
  • 线程创建方式、构造方法和线程属性
    欢迎各位!!!推荐PC端观看文章重点:学会五种线程的创造方式目录1.开启线程的五种方式2.线程的构造方法3.线程的属性及获取方法1.开启线程的五种方式创造线程的基本两步:(1)使用run方法记录线程要做的任务(2)使用线程的引用调用start开启线程1.1.继承Tread,重写runclassm......
  • ABC356G
    题意:给定一个\(N\),求所有\(N\)的子区间\([l,r],1\leql\leqr\leqN\)中满足\(i\in[l,r]\)中有至少一个\(A_i\)的出现次数有且仅出现一次。题意很明确,如何解决?暴力:直接\(N^2\)扫一遍然后进行每个区间的特判即可,复杂度\(O(N^3)\)估计只能过样例。莫队:由于发现......
  • 【教学类-40-09】A4骰子纸模制作9.0(3.47CM嵌套骰子 一条8格便于对折,表格相连 一页3个
    作品展示背景需求:骰子调整到第8版,把骰子图案作成一长条,便于切割裁剪。【教学类-40-08】A4骰子纸模制作8.0(2.97CM嵌套骰子表格相连一页7个油墨打印A4铅画纸)-CSDN博客文章浏览阅读929次,点赞20次,收藏24次。【教学类-40-08】A4骰子纸模制作8.0(3CM嵌套骰子表格相连一页7个油......
  • top命令找到占用CPU最高的java线程
    1、使用jps查找正在运行的java进程2、通过使用top命令查找该线程下CPU使用最高的线程top-Hppid:即  top-Hp2860 3、TIME列就是各个Java线程耗费的CPU时间,显然CPU时间最长的是ID为2968的线程,用printf"%x\n"2968可得到2968的十六进制值为:b984、终于轮到jsta......
  • 0518--台球俱乐部会员网之“NABCD模型”
    一、NABCDNeed(需求):目标用户可能需要一个方便的平台来获取关于台球俱乐部的信息,包括比赛安排、会员活动、教学资源等。这意味着网站需要提供清晰明了的信息架构,让用户能够快速找到所需信息,并且信息更新要及时。用户可能需要与其他会员进行交流和互动,分享经验、技巧,建立社交关系......
  • 我的在线图书馆借阅小程序NABCD
    背景:随着互联网和移动技术的快速发展,校园图书馆也面临着数字化转型的压力和机遇。传统的图书馆借阅方式存在着排队借书、查找图书困难等问题,无法满足学生对便捷、高效借阅服务的需求。因此,设计一款校内开发的图书馆书籍借阅小程序成为一种必然选择。这款小程序将为校园图书馆提供......