需要注意的地方是,这里扩展成完整的可观测的代码的时候,需要把传给 t1 的 some_vec 显式地转为一个 ref,
#include <iostream>
#include <thread>
#include <vector>
void f(std::vector<double>& v) {
// 对v做一些操作
}
struct F {
std::vector<double>& v;
F(std::vector<double>& vv) : v(vv) {}
void operator()() {
// 对v做一些操作
}
};
int main() {
std::vector<double> some_vec{1, 2, 3, 4, 5, 6, 7, 8, 9};
std::vector<double> vec2{10, 11, 12, 13, 14};
std::thread t1{f, std::ref(some_vec)}; // 在单独线程中调用f(some_vec)
std::thread t2{F{vec2}}; // 在单独线程中调用func对象
t1.join();
t2.join();
return 0;
}