boost Thread執行緒庫的一點總結

2021-09-03 08:17:57 字數 2368 閱讀 3332

boost thread執行緒學習
*使用方法:#include

*多個執行緒共享乙個相同的位址空間,多個執行緒可以同時執行

乙個執行緒的執行時執行一系列的指令

*執行緒物件的初始化表示啟用這個執行緒,此時執行緒的可連線的,

有乙個獨一無二的執行緒id

*預設構造的執行緒物件(non-initialized)是不可連線的,

所有不可連線的執行緒共用乙個執行緒id

*乙個可連線的執行緒移動或者呼叫join()或detach()時變成不可連線的

*boost::thread型別的物件不可複製,可以移動,可以作為函式的返回型別

*啟動執行緒:

傳遞可呼叫型別物件給建構函式

boost::thread(callble_type_object);

boost::thread(boost::ref(callable_type_object));

//對於不能拷貝的物件,使用引用時,要確保引用物件的

//生命週期比執行緒的生命週期長

*執行緒屬性的設定:

通過boost::thread::attributes類,來設定具有可移植性的執行緒屬性
*分離執行緒:

使用boost::thread物件的detach()成員函式,將執行緒名和執行緒本身分離開,此後不能對該執行緒進行操作了

即,放棄對執行緒的控制權。呼叫此函式後,執行緒物件變為不可連線,可以安全的銷毀

*連線線程:

使用boost::thread物件的join()成員函式

將本執行緒執行完畢後銷毀,在銷毀之前阻塞main執行緒,呼叫此函式後,執行緒物件變為不可連線,可以安全的銷毀

[對join的個人理解]:join是結合,加入的意思,這裡的join是將本執行緒合併到主線程中

*獲取執行緒id:

執行緒id型別:boost::thread::id

獲取特定執行緒的id:使用boost::thread物件的get_id()成員函式

*執行緒中斷:

呼叫boost::thread物件的interrupt()成員函式

boost::this_thread::disable_interruption boost::thread_object;

//表示本執行緒不能被中斷(在當前作用域中)

boost::this_thread::restore_interruption boost::thread_object;

//表示本執行緒可以被中斷(在當前作用域中)

//此操作一般用在上乙個操作的作用域中

呼叫interrupt()函式,並不能立即終止執行緒,只能待程式執行到中斷點時才能中斷執行緒,在boost::thread4.3這個版本中,

有16個中斷點標誌,主要是各種join、wait、sleep等執行緒或條件變數操作,其中

boost::this_thread::interruption_point()僅僅是乙個中斷點標誌,除了響應interrupt()成員函式以外,沒有其他的功能

另,執行緒中斷時會丟擲boost::thread_interrupted異常,如果異常沒有**獲處理,則本執行緒會終止執行,但不會被銷毀,

若要銷毀本執行緒,還要呼叫join()成員函式。

*執行緒禮讓:

呼叫boost::this_thread命名空間中的非成員函式yield();

即boost::this_thread::yield();

//放棄當前執行緒的時間片,允許其他執行緒執行

當前執行緒等待某個操作時,如果直接用迴圈判斷操作是否結束,這個執行緒會佔滿整個cpu時間,此時應該使用yield()讓出時間片,

一段時間以後,再來判斷操作是否執行結束。

*執行緒等待:

boost::this_thread::sleep_untill(abs_time);

//暫停當前執行緒,直到abs_time

boost::this_thread::sleep_for(rel_time);

//暫停當前執行緒,暫停時間為rel_time

*臨界區鎖定

#include#include使用unique_lock來鎖定臨界區(共享資料),防止競爭條件的發生

thread庫4.0版本(對應boost1.53)已經拋棄了boost::mutex::scoped_lock等巢狀鎖,使用boost::unique_lock來代替

unique_lock是mutex的封裝版本,可以自動的加鎖和解鎖,當然也可以有使用者自己設定加鎖和解鎖的時機。c++11標準庫中已經收錄

Boost thread庫的使用

2009 11 26 kagula 閱讀物件 本文假設讀者有幾下skills 1 在c 中至少使用過一種多執行緒開發庫,有mutex和lock的概念。2 熟悉c 開發,在開發工具中,能夠編譯 設定boost thread庫。1 visual studio 2005 2008 with sp1 2 b...

Boost thread庫的使用

閱讀物件 本文假設讀者有幾下skills 1 在c 中至少使用過一種多執行緒開發庫,有mutex和lock的概念。2 熟悉c 開發,在開發工具中,能夠編譯 設定boost thread庫。1 visual studio 2005 2008 with sp1 2 boost1.39 1.40 通過例項...

Boost thread庫的使用

概要 通過例項介紹boost thread的使用方式,本文主要由執行緒啟動 interruption機制 執行緒同步 等待執行緒退出 thread group幾個部份組成。正文 執行緒啟動 執行緒可以從以下三種方式啟動 第一種用struct結構的operator成員函式啟動 cpp view pla...