執行緒的開闢數量如何在執行時決定,看乙個簡單的例子
#include
#include
#include
#include
#include
#include
template
<
typename _iterator,
typename t>
class
accum};
//多執行緒求和函式
template
<
typename _iterator,
typename _t>
//iterator:迭代器 t 是資料型別
_t sum
(_iterator first, _iterator last, _t& sum)
threads[effect_thread_num -1]
= std::
thread
(accum, begin, last, std::
ref(temp_sum[effect_thread_num -1]
)); std::
for_each
(threads.
begin()
, threads.
end(
), std::
mem_fn
(&std::thread::join));
sum = std::
accumulate
(temp_sum.
begin()
, temp_sum.
end(
), sum)
; std::cout <<
"所有元素和為:"
<< sum << std::endl;
return sum;
}int
main()
sum(vec.
begin()
, vec.
end(
), sum)
;return0;
}
執行結果:
**邏輯如下:
①獲取容器元素個數
②獲取當前機器支援併發執行緒的數量
③設定每個執行緒的最小執行數量,然後進一步確定執行時執行緒的數量(詳情見**和注釋)
④批量執行,並批量join
人,總是要有一點精神的,不是嗎
C 併發程式設計 在執行時選擇執行緒數量
在編寫多執行緒程式時,執行多少執行緒比較合適呢?執行緒並不是越多越好,理論上,硬體支援多少執行緒數,就開多少個執行緒比較合適,有的比如完成埠iocp中建議開2倍執行緒數,因為考慮到有些執行緒可能會掛起等情況。但最重要的一條,首先要獲取當前硬體支援的執行緒數,通常情況下為cpu核數。std threa...
C 11 執行時型別識別(RTTI)
c 11裡的rtti更好用了,參見這裡 與rtti相關的有幾個類和方法 type info類在標頭檔案中定義,代表了乙個c 型別的相關資訊。一般由typeid操作符返回,不能自己構造。type info是實現相關的,不同編譯工具鏈的實現可能不一致。下面的 可以列印出int型別的名字 const st...
C 11 執行時型別識別(RTTI)
c 11裡的rtti更好用了,參見這裡 與rtti相關的有幾個類和方法 type info類在標頭檔案中定義,代表了乙個c 型別的相關資訊。一般由typeid操作符返回,不能自己構造。type info是實現相關的,不同編譯工具鏈的實現可能不一致。下面的 可以列印出int型別的名字 const st...