c++並發練習---多線程順序打印


參考: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();
}

  如果有問題,大家盡快聯系我,歡迎討論,互相進步!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM