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

2021-08-26 04:12:00 字數 2246 閱讀 8427

執行緒

1.thread類

1.1概述

ice中的基礎執行緒是由threadcontrol類和thread類來提供的(在iceutil/iceutil.h中定義):

thread類是乙個抽象基類,擁有乙個純虛方法run。要建立執行緒,必須特化thread類,並實現run方法。

1.2 其成員函式

1)id:該函式返回每個執行緒的唯一識別符號,型別是threadid。在呼叫start函式之前呼叫它時,會引發threadnotstartedexception。

2)start:這個成員函式啟動新建立的執行緒,會呼叫run方法。start方法同時負責引用計數的加減。

3)getthreadcontrol:這個成員函式返回它所在的執行緒控制物件。在呼叫start之前呼叫它同樣會觸發異常。

4)operator== 、operator!=、operator< 這些函式比較兩個執行緒的id,目的是能降thread物件用於有序的stl容器。

5)特別注意:必須在堆上分配thread物件,才能夠釋放正確。

2.threadcontrol類

2.1概述

start方法返回的是型別為threadcontrol物件,指向發出呼叫的執行緒

2.2其成員函式

1)threadcontrol:預設構造器返回乙個threadcontrol物件,指向發出呼叫的執行緒。

2)id:該函式返回每個執行緒的唯一識別符號,型別是threadid。

3)join:這個方法掛起發起呼叫的執行緒,直到join所針對的執行緒終止為止。例如:

iceutil::threadptr t = new readerthread; // create a thread

iceutil::threadcontrol tc = t->start(); // start it

tc.join(); // wait for it

4)detach

這個方法分離乙個執行緒。一旦執行緒分離,就不能再融合;因此必須保證執行緒在程式離開main函式之前終止。

5)isalive:如果底層的執行緒還沒有退出(run方法還沒有完成),該方法就返回真。該方法在實現非阻塞的join時很有用。

6)sleep:這方法掛起執行緒,時間長度由time決定。掛起執行緒就是讓該執行緒離開cpu,讓其他執行緒占用。

7)yield:這個方法使得它所針對的執行緒放棄cpu,讓其他執行緒執行。看了它的**,發現yield的效果等於sleep(0)。

8)operator== 、operator!=、operator< :和上面thread一樣.

2.實現執行緒

**舉例說明實現執行緒(未經嚴格驗證):

檔案

#ifndef myqueue_h_

#define myqueue_h_

#include#include//#include #include //#includeusing namespace std;

//using namespace iceutil;

template class queue : public iceutil::monitor

void put(const t& item)

catch(...)

} _q.push_back(item);

if(_waitingreaders||_waitingwriters)

}t get()

catch (const iceutil::exception &e)

}t item = _q.front();

_q.pop_front();

return item;

}private:

list_q;

short _waitingreaders;

short _waitingwriters;

};#endif

檔案

#include #include#includequeueq;

class readerthread : public iceutil::thread

}};class writerthread : public iceutil::thread

}};int main()

for(i =0;i<5;++i)

for(vector::iterator i = threads.begin();

i != threads.end(); ++i)

return 0;

}

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

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

c 執行緒與併發 1.ice執行緒模型 ice伺服器是多執行緒的。伺服器端run time維護有乙個執行緒池,用於處理到來的請求。通過領導者 跟隨者執行緒模型,客戶發來的每個操作呼叫都會在其自己的執行緒中被分派。多執行緒意味著,來自客戶的多個呼叫可以在伺服器中併發執行。ice執行緒庫提供了許多同步原...