boost庫在工作(17)執行緒之二

2021-06-16 14:55:34 字數 759 閱讀 2315

前面的例子,還是過於簡單,只能學會使用乙個執行緒來呼叫乙個函式來執行。接著下來,我們提高一點要求,使用兩個或兩個以上的執行緒來執行同乙個函式。多個執行緒執行同乙個函式,其實就是執行緒池的概念,因為乙個執行緒只能在乙個cpu在裡執行,如果有四個cpu,那麼最高效率就是有八個執行緒執行,一般來說是cpu的個數的兩倍是最高效率的執行緒模型。因此,我們開發的軟體會在不同的客戶電腦上執行,不同的客戶那裡的電腦配置又不一樣,這時就需要根據客戶電腦的cpu個數來動態配置了。面對這樣的需求,就需要使用boost庫里的執行緒組來解決。在boost庫里,封裝的執行緒使用起來很方便,可以滿足不同的需求。如下面的例子:

//#include "stdafx.h"

#include #include #include //執行緒組執行的函式

void run(int nval)

int _tmain(int argc, _tchar* argv)

//等所有執行緒退出。

threadgroup.join_all();

system("pause");

return 0;}

在這個例子裡,主要使用了boost庫里的執行緒池類thread_group,它提供了多個執行緒建立、儲存、退出等管理。比如使用create_thread函式可以建立多個執行緒,每個執行緒都呼叫函式run執行。使用join_all函式來確保所有執行緒執行,都從執行緒執行函式裡退出來,如果其中乙個執行緒沒有辦法退出,那麼就會一直等待的。

可見,使用boost庫里執行緒組很方面就解決多執行緒建立,執行等問題,對提高軟體開發的效率是顯而易見的。

boost庫在工作(19)執行緒之四

從前面也看到使用鎖boost mutex時,如果不小心就會死鎖,這樣要費心費力去維護這樣的 在boost庫里提供同乙個函式遞迴呼叫時使用的鎖boost recursive mutex,當同乙個執行緒呼叫時,碰到相同已經上鎖的鎖時,還可以繼續往下執行。這時就不用擔心同乙個執行緒呼叫不同的函式時造成死鎖...

boost庫在工作(20)執行緒之五

通過上面的學習,基本上就可以使用執行緒了,但怎麼樣讓執行緒執行類裡的成員函式呢?以便封裝得更方便使用了。接著下來,就看這個例子,如下 include stdafx.h include include include 封裝執行緒組執行的類,並且演示使用類成員函式作為執行緒組執行函式 class cth...

boost庫在工作(18)執行緒之三

前面的例子裡,由於cout輸出並不是多執行緒安全的,如果多個執行緒同時輸出,可能導致死鎖的出現,因此在那個函式新增了乙個 boost mutex 鎖,以便同步多個輸出的執行緒,這樣就不會造成死鎖了。在這個函式裡,還使用乙個類 boost lock guard 這個類是乙個自動鎖的類,所謂的自動鎖,就...