国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

c++11多線程編程之condition_variable

2019-11-06 07:09:16
字體:
來源:轉載
供稿:網友

c++11多線程編程之condition_variable

主要從一個問題出發,編寫一個程序,開啟3個線程,這3個線程的ID分別為A、B、C,每個線程將自己的ID在屏幕上打印10遍,要求輸出結果必須按ABC的順序顯示;如:ABCABC….依次遞推。這里可以用c++11的條件變量來解決問題。涉及到的知識點包括:

1.std::unique_lock

首先介紹unique_lock,這個是一個獨占鎖,它的構造函數有這樣幾種情況:

unique_lock();(1) (since C++11)

unique_lock( unique_lock&& other );(2)(since C++11)

explicit unique_lock( mutex_type& m );(3)(since C++11)

unique_lock( mutex_type& m, std::defer_lock_t t );(4)(since C++11)

unique_lock( mutex_type& m, std::try_to_lock_t t );(5)(since C++11)

unique_lock( mutex_type& m, std::adopt_lock_t t );(6)(since C++11)

template< class Rep, class Period >unique_lock( mutex_type& m,conststd::chrono::duration<Rep,Period>& timeout_duration );(7) (since C++11)

template< class Clock, class Duration >unique_lock( mutex_type& m,const std::chrono::time_point<Clock,Duration>& timeout_time );(8)(since C++11)

其中比較特別的就是4,5,6,分別表示不擁有mutex,試圖擁有鎖,把別人的鎖過繼過來。

7,8就是跟時間相關的鎖了。

2.std::condition_variable

其次就是這個東西了,它的用的時候必須先持有一個unique_lock的變量。

3 代碼實現

#include <iostream>#include <thread>#include <condition_variable>#include <mutex>int g_index = 0;const int g_threads = 5;std::condition_variable cv;std::mutex mx;void func(int i);int main(){	std::thread th[g_threads];	for (int i = 0; i < g_threads; i++)	{		th[i] = std::thread(func, i);	}	for (int i = 0; i < g_threads; i++)		th[i].join();	return 0;}void func(int gi){	for (int i = 0; i < 10; i++)	{		std::unique_lock<std::mutex> lk(mx);		cv.wait(lk, [=]() { return gi == g_index; });		std::cout << (char)('A' + gi);		if (g_index == g_threads - 1)			std::cout << std::endl;		g_index++;		g_index %= g_threads;		lk.unlock();		cv.notify_all();	}}4 輸出

ABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDEABCDE


上一篇:c++實驗

下一篇:C++作業

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 临海市| 仁布县| 比如县| 介休市| 南陵县| 曲阳县| 铜川市| 攀枝花市| 泰兴市| 临武县| 确山县| 寻甸| 阳原县| 高雄县| 吴桥县| 西城区| 岳普湖县| 安新县| 郧西县| 正蓝旗| 桑植县| 佛教| 衡南县| 平乡县| 柘城县| 边坝县| 福泉市| 遵义市| 长武县| 德格县| 金秀| 博野县| 平塘县| 来安县| 乳山市| 彰武县| 方城县| 松潘县| 遵化市| 肇东市| 广饶县|