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

2021-06-16 15:01:11 字數 559 閱讀 2985

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

//#include "stdafx.h"

#include #include #include //全域性鎖。

boost::recursive_mutex g_mutexall;

//遞迴鎖不會死鎖

void first(void)

void second(void)

//執行緒組執行的函式

void run(int nval)

int _tmain(int argc, _tchar* argv)

//等所有執行緒退出。

threadgroup.join_all();

system("pause");

return 0;

}

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

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

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

前面的例子,還是過於簡單,只能學會使用乙個執行緒來呼叫乙個函式來執行。接著下來,我們提高一點要求,使用兩個或兩個以上的執行緒來執行同乙個函式。多個執行緒執行同乙個函式,其實就是執行緒池的概念,因為乙個執行緒只能在乙個cpu在裡執行,如果有四個cpu,那麼最高效率就是有八個執行緒執行,一般來說是cpu...

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

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