首页 > 编程 > C++ > 正文

C++ 11 三个线程打印ABC(顺序打印)

2019-11-06 07:22:04
字体:
来源:转载
供稿:网友

题目:有3个线程A,B, C, 请用多线程编程实现在屏幕上循环打印10次ABCABC..., 其中A线程打印“A”, B线程打印“B”, C线程打印“C”。

使用C++11 实做, 代码如下:

#include <iostream>#include <thread>#include <condition_variable>#include <vector>#include <algorithm>std::mutex mtx;std::condition_variable cvar;char g_ch = 0;void PRint_fun(char ch){	int cyle_cnt = 10;	char ch_ = ch - 'A';	for (int i = 0; i < cyle_cnt; i++)	{		std::unique_lock<std::mutex>ulk(mtx);		cvar.wait(ulk, [ch_] {return ch_ == g_ch; });		std::cout << (char)(ch_ + 'A');		g_ch = (ch_ + 1) % 3;		ulk.unlock();		cvar.notify_all();	}}int main(){	std::vector<std::thread> threads;	threads.push_back(std::thread(print_fun, 'A'));	threads.push_back(std::thread(print_fun, 'B'));	threads.push_back(std::thread(print_fun, 'C'));	std::for_each(threads.begin(), threads.end(), std::mem_fn(&std::thread::join));	std::cout << std::endl;	system("pause");	return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选