多執行緒問題,用法其實並不難,難的是在複雜的場景用不好,多執行緒的用法大家能知道幾個?thread? threadtool?
下面我們詳細講一下多執行緒的歷程:
.net framework 1.0 thread
最初版本多執行緒thread, 功能非常豐富也很強大,但是呢也很容易出錯,主要是多執行緒是從作業系統中拿的,如果執行緒太多,很容易系統卡死。你遍歷迴圈執行一萬個thread你看一下肯定要崩潰。
我們簡單展示一下多執行緒thread的簡單用法:
threadstart ts = new threadstart(new program().getage);
thread th = new thread(ts);
th.start();
th.abort(); //終止執行緒
public void getage()
, age: ");
}
確保沒有輸入引數,沒有返回引數
.net framework 2.0 threadpool
2.0之後呢引入threadpool這樣乙個概念,所有執行緒從執行緒池中獲取,執行緒池可以設定最大執行緒數量,這樣呢就不會影響系統執行緒被濫用導致系統卡死,但是有乙個問題,threadpool 支援的功能 非常少,就導致了也是不很滿足,下面我們簡單用一下theadpool:
waitcallback wcb = new waitcallback(new program().getage);
threadpool.queueuserworkitem(wcb,"join");
public void getage(object kk)
.net framework 3.0 task
目前來說,在實踐的過程中最為好用的就是task,功能強大,而且也不會擔心執行緒太多導致系統卡死,因為2.0版本的影響後續所有的執行緒都放到了執行緒池中,隱藏的很好,執行緒池會動態的啟用以及釋放掉。
我們看下task的用法:
task.run(() => ");
});task.run(getage);
task.waitany();
task.waitall();
public static void getage()
waitany() 代表如果任何乙個執行緒執行完就往下一步執行, waitall() 等所有執行緒執行完才進行下一步操作,會阻塞主線程,值得注意的是,task主線程也會參與計算,而不是像theadpool 這種 全部分配給子執行緒來進行計算
.net framework 4.0 parallel
4.0版本出現了乙個parallel 在某些情況呢是非常好用的,功能也不強大但適用某些場景,簡單**:
parallel.invoke(() => );
listactionlist = new list();
actionlist.add(getage);
actionlist.add(() =>
);parallel.invoke(actionlist.toarray());
public static void getage()
parallel 還支援很多foreach 、for操作
.net framework new func<> action<> 為什麼是new 我也懶得查是那個版本出來的
action<> 和 func<> 作為委託不同之處在於 action針對無返回值的方法 func針對有返回值的方法,直接看例子吧
// action
actionage = new action(getage);
asynccallback ac = ack =>
, this is real success");
};iasyncresult result = age.begininvoke(18, ac, "mom");
result.asyncwaithandle.waitone(1000);
console.writeline($", this is real success. again");
console.writeline("this is success");
// func
funcagevalue = new func(getagevalue);
asynccallback acvalue = ack =>
, this is real success");
};iasyncresult resultvalue = agevalue.begininvoke(18, acvalue, "mom");
console.writeline(age);
if (!resultvalue.iscompleted)
resultvalue.asyncwaithandle.waitone(1000);
console.writeline($"result : ");
console.writeline(resultvalue);
console.writeline($", this is real success. again");
console.writeline("this is success");
console.readline();
public static void getage(int age)
public static string getagevalue(int age)
";}
以後再維護吧。。。。。。。。。。 C 多執行緒問題
多執行緒問題,一直是我的乙個噩夢,老是搞不清楚怎麼回事,真是很慚愧呀,所以今天特地向各位的大大求教。如下 c include www.h include include include include include include pthread cond t cond pthread mutex...
多執行緒問題C
1.過去寫的微控制器裸跑的程式,其實也屬於多執行緒的,用智慧型電表中的韌體做個比方。void main void 迴圈中,所列包括3個 執行緒 處理,執行緒1在執行完之後執行執行緒2,執行緒2執行完進入執行緒3.後面依次,此類我覺得也可稱之 執行緒 由於不必存在同時處理的問題,因此不存在爭搶同一共享...
c 多執行緒問題
synchronizationcontext的物件不是所有執行緒都被附加的,只有ui主線程會被附加。synchronizationcontext物件。這個對像的用處就是可以記錄乙個 主 執行緒的上下文然後再子執行緒處理完之後,要用到主線程去操作的時候可以去post或者send乙個事件去解決 send...