gpt4 book ai didi

c++11多线程,通过引用传递

转载 作者:搜寻专家 更新时间:2023-10-31 01:29:10 25 4
gpt4 key购买 nike

void _function_(std::vector<long long>& results){

results.push_back(10);
return ;
}


int main(){

std::vector<std::thread> threads;
std::vector<std::vector<long long>> results_array;
for(int i=1;i<=N;i++){
results_array[i]=std::vector<long long>();
threads.push_back(std::thread(&_function_,results_array[i]));
}

for(auto& th : threads){
th.join();
}
return 0;
}

这是 C++ 代码。我想用 std::vector<long long>保留每个线程的结果。所以我初始化一个 std::vector<std::vecotor<long long>>对于每个线程。然而,当通过 results_array[i] ,我收到以下错误:

In file included from /usr/include/c++/5/thread:39:0,
from multi-thread.cc:3:
/usr/include/c++/5/functional: In instantiation of ‘struct std::_Bind_simple<void (*(std::vector<long long int>))(std::vector<long long int>&)>’:
/usr/include/c++/5/thread:137:59: required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (*)(std::vector<long long int>&); _Args = {std::vector<long long int, std::allocator<long long int> >&}]’
multi-thread.cc:21:60: required from here
/usr/include/c++/5/functional:1505:61: error: no type named ‘type’ in ‘class std::result_of<void (*(std::vector<long long int>))(std::vector<long long int>&)>’
typedef typename result_of<_Callable(_Args...)>::type result_type;
^
/usr/include/c++/5/functional:1526:9: error: no type named ‘type’ in ‘class std::result_of<void (*(std::vector<long long int>))(std::vector<long long int>&)>’
_M_invoke(_Index_tuple<_Indices...>)

我也试试 std::ref(results_array[i]) , 但有偏距断层。

谁能帮我解决这个问题?谢谢!

最佳答案

这里你有正确的代码:

void _function_(std::vector<long long>& results){

results.push_back(10);

return ;

}

int main(){

int N = 10;

std::vector<std::thread> threads;

std::vector<std::vector<long long>> results_array;

for(int i=0;i<N;i++){

results_array.push_back(std::vector<long long>());

threads.push_back(std::thread(&_function_, std::ref(results_array[i])));

}

for(auto& th : threads){
th.join();
}
return 0;
}

你的问题是在这一行:

threads.push_back(std::thread(&_function_, std::ref(results_array[i])));

你没有得到 results_array 的引用。哟也必须更正这里

results_array.push_back(std::vector<long long>());

关于c++11多线程,通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50460150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com