C 多執行緒編寫的主要知識點 1

2021-10-08 07:18:46 字數 3155 閱讀 4927

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...