自已實現執行緒池

2021-08-29 15:25:34 字數 3259 閱讀 5542

.net內建的threadpool對於加入執行佇列的任務,或是正在執行的任務無法取消,這對於我的專案來說有問題,因此要自定義乙個執行緒池。

我的專案中具體的應用情節如下,某乙個操作會非常耗時(將**插入bdb中),如果將其加入執行緒池中,很可能將執行緒池中的資源耗盡,因此我希望我可以定義乙個maxthreadnum用來控制執行此在操作最大允許同時執行的執行緒數,同時設定執行緒等級為最低threadpriority.lowest,我只要這個操作慢慢執行就行了。

**還需要重構,高手請指點下,對鎖的機制還是不太清楚,

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading;

using

rhino.commons;

namespace

threadpool

private

static

void

aa(object

state, 

bool

timedout)

else

break;//

else//}

}removekey.foreach(t

=>

dict.remove(t));

newtask.foreach(t 

=>

);while

(queue.count 

>0&&

dict.count 

<

maxthreadnum)

}system.threading.threadpool.registerwaitforsingleobject(wait, 

newwaitortimercallback(aa), state, 

2000

, true);}

}//private static int _maxthreadnum = 1;

public

static

intmaxthreadnum

//set 

get; 

set;

}public

static

void

setmaxthreadnum(

intnum)

//////

任務執行佇列

/////

static threadsafequeuequeue = new threadsafequeue();

static

list

<

workerthread

>

queue

=new

list

<

workerthread

>

();///

///目前暫定為只使用乙個執行緒,以免耗近資源

///static

dictionary

<

string

, workerthread

>

dict 

=new

dictionary

<

string

, workerthread

>(1

);private

static

object

state;

public

static

void

aborted(

string

key)

intindex 

=queue.findindex(t 

=>

t.key 

==key);

if(index

>-1)

queue.removeat(index);

wait.set();}}

public

static

void

queueuserworkitem(waitcallback callback, 

object

state, 

string

key);//

queue.enqueue(p);

queue.add(p);

wait.set();}}

}public

class

workerthread

public

string

key 

public

waitcallback callback 

public

object state 

public

void

exec()

}public

workerthread change(workerthread wt)

public

void

start(workerthread wt)

//public void start(waitcallback callback,object state)

////

if(this.thread.threadstate==threadstate.suspended)

////}}

測試**

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.threading;

namespace

threadpooltest

private

static

void

test4(

object

state)

private

static

void

test3(

object

state)

private

static

void

test2(

object

state)

}private

static

void

test(

object

state)}}

}

實現執行緒池

1.執行緒池優點 1 減少建立和銷毀執行緒的次數 2 可以根據系統的能力,調整執行緒池中線程的數目 3 減少切換執行緒的開銷 2.實現自定義執行緒池 思路 public class threadpool extends threadgroup 加入任務 public synchronized voi...

c 執行緒池實現(四)執行緒池實現

前面已經說到了同步佇列的實現,下面來看執行緒池的實現。ifndef include threadpool define include threadpool include include include include include syncqueue.hpp namespace mythrea...

記憶體池 程序池 執行緒池介紹及執行緒池C 實現

平常我們使用new malloc在堆區申請一塊記憶體,但由於每次申請的記憶體大小不一樣就會產生很多記憶體碎片,造成不好管理與浪費的情況。記憶體池則是在真正使用記憶體之前,先申請分配一定數量的 大小相等 一般情況下 的記憶體塊留作備用。當有新的記憶體需求時,就從記憶體池中分出一部分記憶體塊,若記憶體塊...