c++執行緒與併發(ice3.4.2)
ice伺服器是多執行緒模型的。在涉及資源的訪問和操作的時候將要考慮同步訪問機制。
ice執行緒庫提供了一些與執行緒有關的抽象:
互斥體,遞迴互斥體,讀寫遞迴互斥體,監控器,乙個執行緒抽象,允許開發者建立,控制,銷毀執行緒。
iceutil::mutex類提供了簡單的非遞迴互斥機制,其定義如下:
namespaceiceutil ;
class mutex ;
假設有乙個filesystem類和write的函式如下:
#includenamespacefilesystem ;
// ...
}void filesystem::filei::write(const filesystem::lines &text,const ice::current &)
然而這種加入互斥機制的方法並不好,例如對互斥體加鎖了但在函式返回時並沒有實現解鎖操作,這種情況下就引發死鎖情況。
因此我們建議使用ice提供的兩個助手類lock和trylock,如下:
voidsomeclass::somefunction(/* params here... */)
//...
} // 此處呼叫mutex類物件的析構函式,同時會解除互斥鎖的加鎖狀態。
上面所介紹的互斥體是非遞迴性質的,也就是說他們不能被多次加鎖,即使是已經擁有該所的執行緒也不行。這樣會給一些情況帶來不便
iceutil::mutex_mutex;
void f1()
void f2()
為了解決這個問題,ice同樣也提供了遞迴互斥鎖,如下示例:
#include iceutil::recmutex _mutex; // recursive mutex
void f1()
void f2()
由於遞迴互斥體無論是在讀取還是寫操作的情況下,都是將其併發執行緒訪問序列化。但是讀取資源的執行緒並不會修改所訪問的內容;因此讓多個讀取執行緒並行擁有互斥體,而同一時刻只能有乙個寫入的執行緒獲取互斥體。
下面是該讀寫互斥類的定義:
namespaceiceutil ;
}
讀寫鎖提供了一些可使用超時的成員函式。等待的時間量是通過iceutil::time類的例項指定的。
5.1 monitor類定義
monitor類在iceutil::monitor中定義,如下所示:
namespace iceutil ;
}
monitor類相對於互斥體來說,它提供的互斥機制更為靈活,因為他們允許執行緒檢查某一條件,如果條件為假,就讓自己休眠;而這執行緒會讓其他某個改變了條件狀態的執行緒喚醒。 Ice筆記 C 執行緒與併發(二)
執行緒 1.thread類 1.1概述 ice中的基礎執行緒是由threadcontrol類和thread類來提供的 在iceutil iceutil.h中定義 thread類是乙個抽象基類,擁有乙個純虛方法run。要建立執行緒,必須特化thread類,並實現run方法。1.2 其成員函式 1 id...
Ice 執行緒與併發 C
ice中的基礎執行緒是由threadcontrol類和thread類來提供的 在iceutil iceutil.h中定義 thread類是乙個抽象基類,擁有乙個純虛方法run。要建立執行緒,必須特化thread類,並實現run方法。1 id 該函式返回每個執行緒的唯一識別符號,型別是threadid...
Ice讀書筆記 C 執行緒與併發(一)
c 執行緒與併發 1.ice執行緒模型 ice伺服器是多執行緒的。伺服器端run time維護有乙個執行緒池,用於處理到來的請求。通過領導者 跟隨者執行緒模型,客戶發來的每個操作呼叫都會在其自己的執行緒中被分派。多執行緒意味著,來自客戶的多個呼叫可以在伺服器中併發執行。ice執行緒庫提供了許多同步原...