1. 程式人生 > 其它 >【C++ 多執行緒】輪流列印ABC多執行緒

【C++ 多執行緒】輪流列印ABC多執行緒

輪流列印ABC多執行緒

程式碼實現:

 1 #include <iostream>
 2 #include <thread>
 3 #include <condition_variable>
 4 #include <vector>
 5 #include <algorithm>
 6 #include <functional>
 7 #include <thread>
 8 #include <mutex>
 9 
10 std::mutex mtx;
11 std::condition_variable variable;
12 char g_ch = 0; 13 14 void print_fun(char ch) 15 { 16 int cyle_cnt = 10; 17 char ch_ = ch - 'A'; 18 19 for (int i = 0; i < cyle_cnt; i++) 20 { 21 std::unique_lock<std::mutex> ulk(mtx); 22 variable.wait(ulk, [ch_] { return ch_ == g_ch; }); 23 std::cout << (char
)(ch_ + 'A') << std::endl; 24 g_ch = (ch_ + 1) % 3; 25 ulk.unlock(); 26 27 variable.notify_all(); 28 } 29 } 30 31 int main() 32 { 33 std::vector<std::thread> threads; 34 threads.push_back(std::thread(print_fun, 'A')); 35 threads.push_back(std::thread(print_fun, '
B')); 36 threads.push_back(std::thread(print_fun, 'C')); 37 38 std::for_each(threads.begin(), threads.end(), std::mem_fn(&std::thread::join)); 39 40 std::cout << std::endl; 41 return 0; 42 }

輸出: