题目1:子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码

代码1:

 1 #include <iostream>
 2 #include <thread>
 3 #include <mutex>
 4 using namespace std;
 5 
 6 const int count = 50;
 7 int flag = 10;
 8 std::mutex mtex;
 9 
10 void fun(const int num, const string &str) {
11     for(int i = 0; i < count; ++i) {
12         while(num != flag) std::this_thread::yield();
13         mtex.lock();
14         for(int j = 0; j < num; ++j) {
15             cout << str << endl;
16         }
17         std::this_thread::sleep_for(std::chrono::seconds(1));
18         flag = (flag == 10 ? 100 : 10);
19         mtex.unlock(); 
20     }
21 }
22 
23 int main(void) {
24     auto start = std::chrono::high_resolution_clock::now();
25     thread child(fun, 10, "child");
26     fun(100, "father");
27     child.join();
28     auto end = std::chrono::high_resolution_clock::now();
29     std::chrono::duration<double, std::milli> elapsed = end - start;
30     cout << elapsed.count() << endl;
31 
32     return 0;
33 }
View Code

相关文章: