29.迅雷多线程面试题

 1 //编写一个 程序,开启3个线程,这3个线程的ID分别为A,B,C
 2 //每个线程将自己的ID在屏幕打印10遍
 3 //要求输出结果必须按ABC的顺序显示
 4 #include <iostream>
 5 #include <thread>
 6 #include <mutex>
 7 #include <condition_variable>
 8 using namespace std;
 9 
10 int LOOP = 10;
11 int flag = 0;
12 
13 mutex m;
14 condition_variable cv;
15 
16 void fun(int id)
17 {
18     for (int i = 0; i < LOOP; i++)
19     {
20         //设置锁定
21         unique_lock<mutex> ulk(m);
22         while(id != flag)
23         {
24             //不是该出现的场合则继续等待通知,然后再执行while判断
25             cv.wait(ulk);
26         }
27         //输出
28         char ch = 'A' + id;
29         cout << ch;
30         flag = (flag + 1) % 3;
31         //通知全部
32         cv.notify_all();
33     }
34 }
35 
36 void main()
37 {
38     thread t1(fun, 0);
39     thread t2(fun, 1);
40     thread t3(fun, 2);
41     t1.join();
42     t2.join();
43     t3.join();
44     
45     cin.get();
46 }
原文地址:https://www.cnblogs.com/xiaochi/p/8549661.html