在了解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));