c 11多執行緒程式設計 執行緒安全佇列

2021-07-24 08:28:05 字數 1437 閱讀 3605

c11正式引入了自己的執行緒類,讓c++的多執行緒程式設計變的更加優雅。由於不同的編譯器對新特性的支援有所差異,這裡的**都是在gcc 4.8版本下編譯執行。

涉及到的c++11的知識如下:

thread 執行緒庫同步和互斥有關量mutexcondition_variable簡單的資源管理類:lock_guard,unique_lock,shared_ptr.lambda表示式

底層容器為queue,這裡將取元素front() 和彈出pop()操作合併為乙個介面,為了防止以下事件:在取元素和彈出元素之間這段時間又有其他執行緒進行front()或者pop(),出現 錯誤。

#include 

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

template

class safe_queue

safe_queue(const safe_queue& rhs)

void push(t data)

void wait_and_pop(t &res) // 直到佇列不為空

);res = move(m_queue.front());

m_queue.pop();

}bool try_pop(t &res) //立即返回

/*下面這種是由返回值返回元素。

*/shared_ptr

wait_and_pop()

);shared_ptr

res(make_shared(move(m_queue.front())));

m_queue.pop();

return res;

}shared_ptr

try_pop()

};

測試:

void func(safe_queue &que)

string a;

while(cin>>a) // 資料準備執行緒,在不斷的獲取資料。

for_each(threads.begin(),threads.end(),mem_fn(&thread::join)); //呼叫所有執行緒的join函式,等待任務完成

return

0;}

測試結果如下:

C 11多執行緒程式設計

1 c 11新標準引入了五個標頭檔案支援多執行緒程式設計,分別如下 該標頭檔案 該標頭檔案主要宣告了std thread類,其中std this thread 提供了一些輔助函式 命名空間也在該標頭檔案中 該標頭檔案主要宣告了std atomic和std atomic flag兩個類,另外還宣告了一...

c 11 多執行緒程式設計 原子

以下是我關於c 11多執行緒程式設計的學習體會,希望大家多指正 目的 1 原子型別的引入意味著不需要額外的同步機制就可以執行併發的讀寫操作。2 原子操作的確可以作為解決共享資料引起的問題的一種有效的手段。示例 已在vs2015 編譯通過 test atomic 1.cpp 定義控制台應用程式的入口點...

C 11 多執行緒程式設計 一

執行緒很像輕量級的程序,但是乙個程序中的所有執行緒都共享相同的位址空間,執行緒間的大部分資料都可以共享。執行緒間的通訊一般都通過共享記憶體來實現。優點 缺點 主要原因有兩個 任務拆分和提高效能。在編寫軟體的時候,將相關的 放在一起,將無關的 分開,這是乙個好主意,這樣能夠讓程式更加容易理解和測試。將...