ICE執行緒類多執行緒

2021-06-29 05:32:50 字數 2772 閱讀 4148

執行緒

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.實現執行緒

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

檔案

[cpp]view plain

copy

"font-size:16px;"

>#ifndef myqueue_h_  

#define myqueue_h_

#include

#include

//#include 

#include 

//#include

using

namespace

std;  

//using namespace iceutil;

template

<

class

t>  

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

檔案

[cpp]view plain

copy

"font-size:16px;"

>#include 

#include

#include

queue> q;  

class

readerthread : 

public

iceutil::thread  

}  };  

class

writerthread : 

public

iceutil::thread  

}  };  

intmain()  

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

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

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

return

0;  

}

ice 多執行緒同步範例

include include include include using namespace std templateclass queue public iceutil monitor void put const t item t get catch t item q.front q.pop ...

多執行緒 Thread類 建立執行緒

package thread 建立執行緒方式一 繼承 thread 類 重寫方法 run 呼叫 start 開啟執行緒 public class onethread extends thread public static void main string args 可以看出,main 方法和 ru...

Thread執行緒類及多執行緒

1.程序 執行緒 併發 並行是什麼?1 程序 作業系統中可以執行多個任務 程式 這些執行的任務 程式 被稱為程序。程式的執行產生程序 記憶體空間 程式執行的堆疊 可以這樣說,程序是作為作業系統分配資源的基本單位。3 併發 執行緒是併發執行的。作業系統將時間化分為若干個片段 時間片 盡可能的均勻分配給...