參考:http://blog.csdn.net/liuxuejiang158blog/article/details/22061267
題目:編寫一個程序,開啟3個線程,這3個線程的ID分別為A、B、C,每個線程將自己的ID在屏幕上打印10遍,要求輸出結果必須按ABC的順序顯示;如:ABCABC….依次遞推。
解析:最近在看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();
}
如果有問題,大家盡快聯系我,歡迎討論,互相進步!
