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

2021-06-16 15:01:11 字數 619 閱讀 5303

通過上面的學習,基本上就可以使用執行緒了,但怎麼樣讓執行緒執行類裡的成員函式呢?以便封裝得更方便使用了。接著下來,就看這個例子,如下:

//#include "stdafx.h"

#include #include #include //封裝執行緒組執行的類, 並且演示使用類成員函式作為執行緒組執行函式

class cthreadbase

} void stop(void)

virtual void run(int nval)

private:

//定義乙個執行緒組物件。

boost::thread_group m_threadgroup;

};int _tmain(int argc, _tchar* argv)

在這個例子裡封裝了乙個類cthreadbase,這個類可以表示乙個執行緒執行, 也可以多個執行緒執行,並且可以讓執行緒執行類裡的成員函式,這樣更加方便新增**和管理**了。在這個例子裡,要注意的就是bind器的使用,如下:

m_threadgroup.create_thread(boost::bind(&cthreadbase::run, this,i));

首先獲取成員函式的指標,然後再傳送this指標過去,然後就可以呼叫類例項化的成員函式了。

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

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

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

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

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

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