c 使用智慧型指標的執行緒安全佇列

2021-08-16 04:48:37 字數 1371 閱讀 4863

整理自c++併發程式設計實戰

使用std::shared_ptr<>的執行緒安全佇列

/*

* threadsafe_queue_ptr.cpp

* * created on: mar 2, 2018

* author: [email protected]

* 為了防止在wait_and_pop()中引發異常,

* 所以將shared_ptr<>的初始化移動到push()

* 呼叫,並且儲存shared_ptr<>的例項而不是

* 儲存值。將內部的queue複製到shared_ptr<>

* 並不會引發異常。

*/#include #include #include #include #include using namespace std;

templateclass threadsafe_queue

void wait_and_pop(t& value)

shared_ptrtry_pop()

void push(t new_value)

bool empty() const

private:

//互斥鎖變數

mutable mutex _mut;

//使用智慧型指標儲存的佇列型別

queue> _data_queue;

//條件變數

condition_variable _data_cond;

};int main()

{ threadsafe_queuemy_queue;

my_queue.push(1);

my_queue.push(2);

my_queue.push(3);

my_queue.push(4);

my_queue.push(5);

my_queue.push(6);

my_queue.push(7);

int a = 1;

my_queue.try_pop(a);

shared_ptri = my_queue.try_pop();

cout<<"try_pop pop出的數是:"<<*i《執行結果:

clh01s@clh01s:~/testcode/併發$ g++ threadsafe_queue_ptr.cpp -pthread -std=c++11

clh01s@clh01s:~/testcode/併發$ ./a.out

加鎖_mut

pop:1

try_pop pop出的數是:2

等待pop

開始pop

wait_and_pop pop出的數是:3

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

c11正式引入了自己的執行緒類,讓c 的多執行緒程式設計變的更加優雅。由於不同的編譯器對新特性的支援有所差異,這裡的 都是在gcc 4.8版本下編譯執行。涉及到的c 11的知識如下 thread 執行緒庫同步和互斥有關量 mutex和condition variable簡單的資源管理類 lock g...

C 智慧型指標使用

由於 c 語言沒有自動記憶體 機制,程式設計師每次 new 出來的記憶體都要手動 delete。程式設計師忘記 delete,流程太複雜,最終導致沒有 delete,異常導致程式過早退出,沒有執行 delete 的情況並不罕見。std auto ptr boost scoped ptr boost ...

C 智慧型指標的使用

測試環境 win7,vs2012 如果未安裝boost,請參考 涉及智慧型指標 shared ptr,weak ptr,scoped ptr,auto ptr 其它 enable shared from this 總呼叫函式 testsmartpointer 可以將其放在main 中執行。解釋在 中...