在了解std::async()时写了一下测试代码,网上的测试代码参数一般都是基础类型值传递,但是我想看下vector并发的情况,代码如下:
int doSomething(char c, ConcurrentVector<char>& vec, int* aomic){
default_random_engine dre(c);
uniform_int_distribution<int> id(1,10);
for(int i = 0; i < 100; ++i){
vec.push_back(c);
}
return c;
}
int main(int argc, char const *argv[]){
ConcurrentVector<char> vec ;//ConcurrentVector是封装的线程安全vector
future<int> res(async(std::launch::async, doSomething, '.', vec, aomic));
return 0;
}
此时是编译不过的,提示错误:no matching function for call to ‘async’。
把doSomething的引用符号去掉就行了,说明不能传递引用对象。
解决方案:用std::ref()包装一下就行了:
future<int> res(async(std::launch::async, doSomething, '.', std::ref(vec), aomic));
本文探讨了在C++中使用std::async进行线程并发编程时遇到的问题,特别是当尝试将引用作为参数传递给异步任务时所遇到的编译错误,并给出了正确的实现方式。
223

被折叠的 条评论
为什么被折叠?



