21xrx.com
2025-03-27 22:50:38 Thursday
文章检索 我的文章 写文章
C++中thread的参数详解
2023-06-27 09:10:11 深夜i     13     0
C++ Thread 参数 详解

C++中的thread是一种用于实现多线程编程的重要工具,在使用过程中,需要给线程函数传递一些参数,以达到特定的功能目的。本文将介绍C++中thread的参数详解,帮助读者更好地了解和使用该工具。

1. 线程函数

线程函数是指在创建线程时指定的函数,可以是任意可调用对象,例如函数指针、成员函数和可调用对象。线程函数的参数类型必须和线程创建时传递的参数类型相同。

2. 线程创建参数

线程创建参数是通过第二个参数来传递的,类型为可变参数模板类型,可以传递任意数量的参数。线程创建参数的作用是传递给线程函数的参数,可以是基本数据类型、自定义数据类型、STL容器类型等等。

3. 线程启动和传递参数

使用C++11标准中的thread类创建线程时,可以传递任意数量的参数。例如:

void thread_func(int arg1, double arg2, string arg3)
  // 线程函数代码
int main() {
  int a = 1;
  double b = 2.0;
  string c = "hello";
  // 创建线程并传递参数
  thread t(thread_func, a, b, c);
  // 等待线程结束
  t.join();
  return 0;
}

以上代码中,thread_func是线程函数,接受三个参数,类型分别为int、double、string。在main函数中,分别定义了这三个参数,并通过thread类创建了一个名为t的线程,并传递了这三个参数。最后调用t.join()等待线程执行完毕。

4. 传递引用和指针

在线程函数中传递引用或指针时,需要注意线程的处理时序,以及数据的同步问题。

#include <iostream>
#include <thread>
#include <string>
#include <vector>
using namespace std;
void modify_vector(vector<string>& v) {
  cout << "Before modify_vector: v.size() = " << v.size() << endl;
  v.push_back("hello");
  v.push_back("world");
  cout << "After modify_vector: v.size() = " << v.size() << endl;
}
int main() {
  vector<string> v "bar";
  thread t(modify_vector, ref(v));
  t.join();
  cout << "In main: v.size() = " << v.size() << endl;
  for (string s : v)
    cout << s << " ";
  
  cout << endl;
  return 0;
}

以上代码中,线程函数modify_vector接受一个vector的引用,旨在在其中添加两个新的元素。在main函数中,定义了一个vector v,并传递给t线程,此时需要使用ref(v)来传递v的引用。最后在main函数中打印v的大小和内容,可以发现,在modify_vector函数中添加的两个新元素,也被成功添加到了v中。

总之,C++中的thread类是一种非常实用的多线程编程工具,通过掌握线程函数和线程创建参数的使用方法,能够更灵活地编写多线程程序,提高程序的效率和性能。

  
  

评论区