C 多執行緒系列(四)

2022-08-05 07:30:28 字數 2158 閱讀 3211

parallel類定義了for、foreach和invoke的靜態方法。parallel類使用多個任務,因此使用多個執行緒來完成這個作業。

parallel.for()方法類似於c#的for迴圈語句,也是多次執行乙個任務。使用parallel.for方法,可以並行執行迭代。迭代的順序沒有定義

parallel.for(0, 10, i =>, task:, thread:

", i, task.currentid, thread.currentthread.managedthreadid);

});//從結果可以看出,順序是不能保證的。

也可以提前中斷for方法。for()方法的乙個過載版本接受第三個action型別的引數。使用這些引數定義乙個方法,就可以呼叫parallelloopstate的break()或stop()方法,以影響迴圈的結果。

parallelloopresult result =parallel.for(

0, 10, (int i, parallelloopstate pls) =>, task:, thread:

", i, task.currentid, thread.currentthread.managedthreadid);

thread.sleep(

10);

if (i > 5

) pls.break();//盡早停止,並沒有實現立即停止

});console.writeline(

"result.iscompleted

", result.iscompleted);

console.writeline(

"result.lowestbreakiteration

", result.lowestbreakiteration);

parallel.for方法可能使用幾個執行緒來執行迴圈,如果需要對每個執行緒進行初始化,就可以使用parallel.for()方法。出了from和to對應的值外,還接受三個委託引數。

parallel.for(0, 10, () =>, task

", thread.currentthread.managedthreadid, task.currentid);

return

string.format("t"

, thread.currentthread.managedthreadid);

},(i, pls, str1) => str1 thread task

", i, str1,

thread.currentthread.managedthreadid, task.currentid);

thread.sleep(

10);

return

string.format("i "

, i);

},(str1) =>

", str1);

});

parallel.foreach方法遍歷實現了ienumerable的集合,其方式類似於foreach語句,但以非同步方式遍歷。這裡也沒有確定遍歷順序。

string arr = ;

parallel.foreach

(arr, value =>console.writeline(value));

parallel.foreach

(arr, (value, pls, k) =>,

", value, k);

if (value == "

kkk"

) pls.stop();

});

如果多個任務應並行執行,就可以使用parallel.invoke方法。

public

static

void invoke(params

action actions);

public

static

void invoke(paralleloptions paralleloptions, params action actions);

多執行緒系列(四) Task

目錄 一 為什麼使用任務 執行緒池已經可以讓我們簡單地建立執行緒,並優化了效能。但是,執行緒池的缺點在於,我不清楚我的操作什麼時候完成,也不能收到返回值,因為委託是沒有返回值的。所以任務就出現了,它可以完成執行緒池能夠完成的任務。system.threading.tasks 命名空間二 任務 我們使...

C 多執行緒系列

個人感覺c 的程式設計,除了對演算法和類庫的使用以外,達到一定的水平以後,多執行緒的使用將會成為乙個很大的瓶頸。所以重新花費時間讀了一本書 net 4.0物件導向程式設計漫談 應用篇 裡面關於多執行緒的描述。自己做了乙個讀書筆記,把多執行緒部分的要點進行了梳理,並且適當的加上了一些自己的測試和理解。...

c 多執行緒(四)

執行緒間通訊 主線程建立子執行緒必定會為主執行緒分擔一部分工作,這樣不可避免的會在這兩個執行緒之間存在訊息傳遞渠道,因此主線程和子執行緒之間要進行通訊。下面介紹幾種通訊方式 全域性變數 由於同一程序的各個執行緒之間共享該程序的資源,因此,解決執行緒間通訊最簡單的方式是使用全域性變數。對於標準型別的全...