交替打印ABC多线程(互斥量+条件变量)

Posted 每天告诉自己要努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了交替打印ABC多线程(互斥量+条件变量)相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;

mutex mymutex; //全局锁
condition_variable cv;//全局条件变量
int flag = 0;

void func_a() 
	unique_lock<mutex> locka(mymutex);
	for (int i = 0; i < 5; i++) 
		while (flag != 0) cv.wait(locka);
		//如果falg == 0,不会阻塞,直接运行后面的
		cout << "thread1: A" << endl;
		flag = 1;
		cv.notify_all();
	
	cout << "thread1 finsh" << endl;


void func_b() 
	unique_lock<mutex> lockb(mymutex);
	for (int i = 0; i < 5; i++) 
		while (flag != 1) cv.wait(lockb);
		//如果falg == 1,不会阻塞,直接运行后面的
		cout << "thread2: B" << endl;
		flag = 2;
		cv.notify_all();
	
	cout << "thread2 finsh" << endl;


void func_c() 
	unique_lock<mutex> lockc(mymutex);
	for (int i = 0; i < 5; i++) 
		while (flag != 2) cv.wait(lockc);
		//如果falg == 2,不会阻塞,直接运行后面的
		cout << "thread3: C" << endl;
		flag = 0;
		cv.notify_all();
	
	cout << "thread2 finsh" << endl;


int main() 
	thread th1(func_a);
	thread th2(func_b);
	thread th3(func_c);

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

	return 0;


以上是关于交替打印ABC多线程(互斥量+条件变量)的主要内容,如果未能解决你的问题,请参考以下文章

使用互斥量实现多线程交替打印helloworld

使用互斥量实现多线程交替打印helloworld

利用条件变量和互斥量循环打印ABC和1-100的错误情况

Linux多线程同步之互斥量和条件变量

多线程并发编程

Linux 多线程同步机制:互斥量信号量条件变量