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...