c 11併發程式設計歷程(6)在執行時選擇執行緒的數量

2021-10-05 02:08:38 字數 1343 閱讀 4784

執行緒的開闢數量如何在執行時決定,看乙個簡單的例子

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