Boost Thread學習筆記四

2021-09-08 23:20:00 字數 1519 閱讀 7605

barrier

barrier類的介面定義如下:

1 class barrier : private boost::noncopyable   // exposition only

2 ;barrier類為我們提供了這樣一種控制線程同步的機制:

前n-1次呼叫wait函式將被阻塞,直到第n次呼叫wait函式,而此後第n+1次到第2n-1次呼叫wait也會被阻塞,直到第2n次呼叫,依次類推。

barrier::wait的實現十分簡單:

1 barrier::barrier(unsigned int count)

2     : m_threshold(count), m_count(count), m_generation(0)

3 7 

8 bool barrier::wait()

9 20 

21     while (gen == m_generation)    // if m_generation is not changed, lock current thread.

22         m_cond.wait(lock);

23     return false;

24 }

因此,說白了也不過是mutex的乙個簡單應用。

以下是乙個使用barrier的例子:

1 #include 

2 #include 

4 int i = 0;

5 boost::barrier barr(3);    // call barr.wait 3 * n times will release all threads in waiting

6 7 void thread()

8 12 

13 int main()

14 如果去掉其中thrd3相關的**,將使得執行緒1、2一直處於wait狀態,進而使得主線程無法退出。

xtime

xtime是boost::thread中用來表示時間的乙個輔助類,它是乙個僅包含兩個成員變數的結構體:

1 struct xtime

2 ;condition::timed_wait、thread::sleep等涉及超時的函式需要用到xtime。

需要注意的是,xtime表示的不是乙個時間間隔,而是乙個時間點,因此使用起來很不方便。為了方便使用xtime,boost提供了一些輔助的xtime操作函式,如xtime_get、xtime_cmp等。

以下是乙個使用xtime來執行sleep的例子(跟簡單的一句sleep比起來,實在是太複雜了),其中用到了xtime初始化函式xtime_get:

1 #include 

2 #include 

3 #include 

5 int main()

6  

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程式設計指南 轉

boost thread程式設計指南 c 標準庫沒有涉及執行緒,在c 中,雖然不可能寫出標準相容的多執行緒程式,程式設計師可以使用特定作業系統提供的執行緒庫來寫出多執行緒程式來。可是,這至少導致兩個突出的問題 作業系統普遍提供的是c庫,在c 中使用要更小心,每個作業系統都有自己的一套支援多執行緒的庫...

Boost thread庫的使用

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