C 多執行緒處理List資料

2022-07-03 05:18:15 字數 1264 閱讀 7356

**思路

將要處理的資料放到concurrentqueue中,然後開啟多個執行緒去處理資料,處理完成後,再到佇列中獲取下乙個待處理資料。

concurrentqueue表示執行緒安全的先進先出 (fifo) 集合,屬於system.collections.concurrent命名空間下的乙個資料結構

直接上**

/// /// 多執行緒處理資料(無返回值)

///

/// 資料型別

/// 待處理資料

/// 資料處理方法(有引數無返回值)

/// 處理執行緒數量

/// 是否等待執行結束

static void runtask(listlist, actionaction, int threadcount = 5, bool waitflag = true)

});}

if (waitflag)

}/// /// 多執行緒處理資料(返回處理後列表)

///

/// 資料型別

/// 待處理資料

/// 資料處理方法(有引數有返回值)

/// 處理執行緒數量

/// 資料處理後結果

static listruntask(listlist, funcfunc, int threadcount = 5)

return rlist;

});}

task.waitall(tasks);

for (int i = 0; i < threadcount; i++)

return result;

}

呼叫方法
listlist = new list() ;

//輸出列表中的資料,且加上「action」字元字首

runtask(list, d => );

//對列表中資料都執行 「*2」 的操作

var result = runtask(list, d => );

result.foreach(d => console.writeline(d));

最後的話

上面的**只是簡單的實現了對資料的處理,並沒有考慮到對記憶體的使用限制,一般的專案中使用還是可以的。

最後我嘗試了下,生成乙個100m的列表,然後將其載入到concurrentqueue,監控程式記憶體占用,發現沒有很大的記憶體占用變化。

C 多執行緒處理資料

os centos 7 編譯環境 gcc 4.8 cpu 2顆 intel r xeon r cpu e5 2670 v3 2.30ghz,24核48執行緒。int pthread create pthread t thread,const pthread attr t restrict attr,...

C 多執行緒處理

region 變數初始化 string tx 任務執行緒分派數 每次設定一組 一組十個執行緒 任務執行緒 限制最多十個執行緒 long threadcount 0 long maxthreadcount 10 manualreseteventslim manual new manualresetev...

C 多執行緒處理基礎

cpu 處理器 或者核心 核心是實際執行程式的硬體單元。程序是某個程式當前正在執行的例項 作業系統的一項基本功能就是管理程序。每個程序都包含乙個或多個執行緒。程式中可以使用system.diagnostics命名空間的process類的例項來訪問程序。在語句和表示式的級別上,c 本質上就是在描述控制...