參考:http://blog.csdn.net/liuxuejiang158blog/article/details/22061267ios
題目:編寫一個程序,開啓3個線程,這3個線程的ID分別爲A、B、C,每一個線程將本身的ID在屏幕上打印10遍,要求輸出結果必須按ABC的順序顯示;如:ABCABC….依次遞推。c++
解析:最近在看c++11的併發編程,看到這題最開始的思路是想到了應該使用鎖和條件變量的知識(貌似也只有對於lock類型的多線程編程大都使用這兩種/(ㄒoㄒ)/~~),這題的關鍵點在於同步的問題,在這裏我使用了一個flag全局變量,用來和條件變量控制同步,而在C++11中條件變量有兩種方法notify_one和notify_all,多線程的話(3個及以上),咱們須要使用notify_all配合輔助變量來實現同步控制。編程
#include<iostream> #include<thread> #include<mutex> #include<condition_variable> std::condition_variable cond; std::mutex print_mutex; int flag = 0; void print_thread(int num) { for (int i = 0; i < 10; i++) { std::unique_lock<std::mutex> lk(print_mutex); cond.wait(lk, [&]() {return num == flag; }); std::cout << char('A' + num); flag = (flag + 1) % 3; cond.notify_all(); } } int main() { std::thread t1(print_thread, 1); std::thread t2(print_thread, 2); print_thread(0); t1.join(); t2.join(); }
若是有問題,你們儘快聯繫我,歡迎討論,互相進步!多線程