Ice筆記 C 執行緒與併發(小結)

2021-08-26 04:17:24 字數 1472 閱讀 1973

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執行緒庫提供了許多同步原...