我目前有這樣的代碼塊
UINT8* u = getResult();
for (UINT64 counter = 0; counter < MaxCount; counter )
{
for (UINT64 index = 0; index < c_uOneMB; index)
{
*u = genValue();
}
}
現在為了讓這個運行更快。我正在做這樣的事情。基本上將內線拆分成一個方法。但是,我有兩個擔憂,我不確定如何解決。
- *u 我該如何處理?
- 在呼叫 doSomethingElse() 之前,所有執行緒都需要 .join()
關于如何做到這一點的任何建議?
void doSomething(UINT8* u)
{
for (UINT64 index = 0; index < c_uOneMB; index)
{
*u = genValue();
}
}
UINT8* u = getResult();
for (UINT64 counter = 0; counter < MaxCount; counter )
{
std::thread t(doSomething,u);
}
doSomethingElse();
uj5u.com熱心網友回復:
您提供的細節很少,我只能提供以下資訊:
std::generate_n(std::execution::par, getResult(), MaxCount * c_uOneMB, genValue);
- https://en.cppreference.com/w/cpp/algorithm/generate_n
- https://en.cppreference.com/w/cpp/algorithm/execution_policy_tag
uj5u.com熱心網友回復:
使用多個執行緒并行化此 for 回圈的最佳方法
最佳方式取決于許多因素并且是主觀的。事實上,有時(也許大部分時間)非并行代碼更快。如果速度是最重要的,那么最好的方法就是你測量到的最快的方法。
使用標準庫演算法通常很簡單:
std::generate_n(
std::execution::par_unseq,
u,
MaxCount * c_uOneMB,
genValue);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/447433.html
上一篇:同時啟動執行緒并爭議全域變數
下一篇:從執行緒函式中獲取值
