C++ 11 三个线程打印ABC(顺序打印)
2017-03-05 10:09
246 查看
题目:有3个线程A,B, C, 请用多线程编程实现在屏幕上循环打印10次ABCABC..., 其中A线程打印“A”, B线程打印“B”, C线程打印“C”。
使用C++11 实做, 代码如下:
使用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; }
相关文章推荐
- 有三个线程名字分别是A、B、C,每个线程只能打印自己的名字,在屏幕上顺序打印 ABC,打印10次。
- 多线程(至少三个线程)分别打印A、B、C,要求按ABC的顺序循环打印10次。
- 三个线程轮流执行顺序打印ABC(一):使用Semaphore实现
- 启动三个线程A,B,C,打印10次 按照ABC的顺序输出
- 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归
- 三个线程轮流执行顺序打印ABC(三):使用Lock实现
- 三个线程顺序打印ABC
- 三个线程分别打印ABC,按顺序输出ABCABC...
- 三个线程轮流执行顺序打印ABC(二):使用Lock+Condition实现
- java多线程面试题:三个线程顺序打印ABC,重复10次
- Java并发编程--三个线程顺序打印ABC
- 有三个线程名字分别是A、B、C,每个线程只能打印自己的名字,在屏幕上顺序打印 ABC,打印10次。不准使用线程的sleep()
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 第四题(迅雷笔试题):编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- [Java多线程]ABC三个线程顺序输出的问题
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 三个线程循环打印ABC10次的几种解决方法
- 有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC