cpp中将含有引用形式传递参数的函数添加到多线程中 代码示例
时间: 2024-03-10 08:44:44 浏览: 20
当函数的参数是引用类型时,我们需要使用 `std::ref` 函数来将其包装为一个可复制的对象,以便在多个线程中使用。下面是一个示例代码,展示了如何将含有引用形式传递参数的函数添加到多线程中:
```c++
#include <iostream>
#include <thread>
void threadFunc(int& val) {
val++;
}
int main() {
int val = 10;
std::thread t(threadFunc, std::ref(val));
t.join();
std::cout << "Value: " << val << std::endl;
return 0;
}
```
在上面的代码中,我们定义了一个函数 `threadFunc`,它的参数是一个 `int` 类型的引用。在 `main` 函数中,我们创建了一个 `int` 类型的变量 `val`,并将其初始化为 `10`。然后,我们使用 `std::thread` 类来创建一个新的线程,并将 `val` 的引用包装为一个可复制的对象,以便在线程中使用。在线程中,我们调用了 `threadFunc` 函数,将 `val` 的值加 1。最后,我们调用 `join()` 函数来等待线程执行完成,并输出 `val` 的值,确认其已经被修改为 `11`。
需要注意的是,如果我们不使用 `std::ref` 函数来包装引用类型的参数,直接将引用类型的参数传递给 `std::thread` 类的构造函数,会导致编译错误。因为 `std::thread` 类的构造函数会将传递的参数进行复制,而引用类型的参数不能被复制。