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