Ice讀書筆記 C 執行緒與併發(一)

2021-05-27 18:31:06 字數 1503 閱讀 6173

c++執行緒與併發

1. ice執行緒模型

ice伺服器是多執行緒的。伺服器端run time維護有乙個執行緒池,用於處理到來的請求。通過領導者-跟隨者執行緒模型,客戶發來的每個操作呼叫都會在其自己的執行緒中被分派。

多執行緒意味著,來自客戶的多個呼叫可以在伺服器中併發執行。ice執行緒庫提供了許多同步原語,比如簡單互斥體,讀寫鎖,以及監控器等;這些同步原語允許實現不同力度的併發控制。

2. 執行緒庫綜述

ice執行緒庫提供了一些與執行緒有關的抽象:互斥體;遞迴互斥體;讀寫遞迴互斥體;監控器;乙個執行緒抽象,允許開發者建立、控制、銷毀執行緒(執行緒api是iceutil名字空間一部分)。

3. 互斥體

iceutil::mutex類(在iceutil/mutex.h中定義)和iceutil::staticmutex(在iceutil/staticmutex.h中定義)提供了簡單的非遞迴互斥機制:

namespace iceutil ;

struct staticmutex ;

}

假設有乙個檔案類,名為filesystem,他有乙個read和write的操作函式(舉例write):

#include // ...

namespace filesystem ;

// ...

}

filesystem::lines;

void filesystem::filei::write(const filesystem::lines & text,

const ice::current &)

那麼加入執行緒機制後:

void filesystem::filei::write(const filesystem::lines & text,

const ice::current &)

但是使用這樣的lock和unlock操作有乙個固定的問題:如果在程式中漏寫unlock操作,或者程式在unlock操作完成之前就已經返回,就會出現死鎖的情況。

要保證互斥鎖的解鎖,mutex類含有兩個助手類的型別定義lock和trylock:

namespace iceutil ;

}

lockt 和trylockt 是簡單的模板,主要由構造器和析構器組成;構造器針對它的引數呼叫lock,而析構器呼叫unlock。現在重寫write函式:

void filesystem::filei::write(const filesystem::lines & text,

const ice::current &)

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

執行緒 1.thread類 1.1概述 ice中的基礎執行緒是由threadcontrol類和thread類來提供的 在iceutil iceutil.h中定義 thread類是乙個抽象基類,擁有乙個純虛方法run。要建立執行緒,必須特化thread類,並實現run方法。1.2 其成員函式 1 id...

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

c 執行緒與併發 ice3.4.2 ice伺服器是多執行緒模型的。在涉及資源的訪問和操作的時候將要考慮同步訪問機制。ice執行緒庫提供了一些與執行緒有關的抽象 互斥體,遞迴互斥體,讀寫遞迴互斥體,監控器,乙個執行緒抽象,允許開發者建立,控制,銷毀執行緒。iceutil mutex類提供了簡單的非遞迴...

Ice 執行緒與併發 C

ice中的基礎執行緒是由threadcontrol類和thread類來提供的 在iceutil iceutil.h中定義 thread類是乙個抽象基類,擁有乙個純虛方法run。要建立執行緒,必須特化thread類,並實現run方法。1 id 該函式返回每個執行緒的唯一識別符號,型別是threadid...