题目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 }