threadstart threadstart = dowork1;
thread thread =
newthread
(threadstart)
; thread.
start()
;//do something in main
thread.
join()
;// wait thread run to end
private
static
void
dowork1()
1.1 執行緒只能承諾嘗試終止執行緒,但是不保證成功。
1.2 被終止時lock物件被釋放,釋放後程式其他執行緒訪問,從而執行緒變的不安全
1.3 執行緒終止時,clr可以保證自己的內部資料結構不被破壞,但bcl沒有能力保證。其他執行緒訪問破壞的資料會造成嚴重問題
threadpool.
queueuserworkitem
(dowork,
"+")
;for
(int count =
0; count < repeat; count++
) thread.
sleep
(1000
);
private
static
void
dowork
(object state)
}
2.1 (優點)執行緒池能夠減少執行緒分配的開銷,
2.2 (缺點)執行緒池 內任務時間都較短
2.2 (缺點)執行緒池不能管理執行緒管理和同步
3.1 監視非同步操作的狀態,知道它何時完成
3.2 執行緒池, 避免啟動和終止執行緒的巨大開銷
3.3 避免死鎖
3.4 為不同的操作提供原子性 並同步資料訪問
// 1. 無返回值的task
task task = task.
run(()
=>})
;for
(int i =
0; i <
1000
; i++
) task.
wait()
;// wait task run to end
// 2. 有返回值的task
task<
string
> task1 = task.
run<
string
>((
)=> picalculater.
calculate
(100))
;for
(int i =
0; i <
10000
; i++
)else
} console.
writeline
(task1.result)
;
3.5 task 的狀態可以使用 status 來獲得,created,waitingforactivation, waitingtorun,running,waitingforchildrentocomplete ,rantocompletion ,canceled ,faulted,(iscomplete == true)
3.6 task.currentid
3.7
task taska = task.
run(()
=> console.
writeline
("starting..."))
.continuewith
( antecedent=
>console.
writeline
("continuing a..."))
;// b 和 c 的順序並不一定,他們時**並列**的
task taskb = taska.
continuewith
( antecedent =
> console.
writeline
("continuing b..."))
;task taskc = taska.
continuewith
( antecedent =
> console.
writeline
("continuing c..."))
; task.
waitall
(taskb, taskc)
;
// task 鏈結的條件
task<
string
> task = task.
run<
string
>((
)=>);
task faultedtask = task.
continuewith
((antecedenttask)
=>
, taskcontinuationoptions.onlyonfaulted
);task canceledtask = task.
continuewith
((antecedenttask)
=>
, taskcontinuationoptions.onlyoncanceled
);task completedtask = task.
continuewith
((antecedenttask)
=>
, taskcontinuationoptions.onlyonrantocompletion
);//task 完成時執行緒已經退出了,不能沿著鏈條向下傳遞
// 不管
task.
waitany
(completedtask, canceledtask, faultedtask)
;
C 多執行緒 知識點記錄
今天接觸了c語言中的多執行緒,在這裡記錄一下 第一步 引入標頭檔案pthread.h include 第二步 運用函式 pthread t 建立執行緒控制代碼 pthread create 建立執行緒 引數 第乙個引數執行緒控制代碼 第二個引數null就行 第三個引數是函式名型別 void 第四個引...
多執行緒之知識點
多執行緒的學習 1.都不是原子操作,在多執行緒中值可能被改變 因此在多執行緒環境中對乙個變數進行讀寫時,我們需要有一種方法能夠保證對乙個值的遞增操作是原子操作 即不可打斷性,乙個執行緒在執行原子操作時,其它執行緒必須等待它完成之後才能開始執行該原子操作。這種涉及到硬體的操作會不會很複雜了,幸運的是,...
多執行緒知識點總結
多執行緒的問題主要圍繞3個問題處理 1.原子性,2.可見性,3.有序性 1.原子性,不可被其他執行緒打斷的操作。如read.write sychronized 2.可見性 一條執行緒修改了某值,新值對其他執行緒立即可知 普通變數是通過主記憶體完成多執行緒的共享,因此在多執行緒的情況下,很多髒資料。v...