21xrx.com
2024-12-22 20:55:53 Sunday
登录
文章检索 我的文章 写文章
C++线程的参数传递方式
2023-06-29 12:23:47 深夜i     --     --
C++ 线程 参数 传递方式

C++线程是一种并发编程的方式,可以让程序同时执行多个任务。参数传递是线程编程中十分重要的一个方面,C++线程有多种参数传递方式,下面将对其进行详细介绍。

1. 值传递

C++线程可以使用值传递的方式传递参数,这种方式可以将参数值传递给线程函数,并且在函数内部进行修改。但是需要注意的是,在线程函数中修改的是副本,不会对原始参数值产生影响。

示例代码:


#include <iostream>

#include <thread>

void thread_func(int val) {

  std::cout << "传入的参数为:" << val << std::endl;

  val++;

  std::cout << "修改后的参数为:" << val << std::endl;

}

int main() {

  int val = 10;

  std::thread t(thread_func, val);

  t.join();

  std::cout << "原始参数为:" << val << std::endl;

  return 0;

}

输出结果:


传入的参数为:10

修改后的参数为:11

原始参数为:10

2. 引用传递

C++线程还可以使用引用传递的方式传递参数,这种方式可以更改原始参数值。在线程函数内部修改参数值后,原始参数值也会被修改。

示例代码:


#include <iostream>

#include <thread>

void thread_func(int& val) {

  std::cout << "传入的参数为:" << val << std::endl;

  val++;

  std::cout << "修改后的参数为:" << val << std::endl;

}

int main() {

  int val = 10;

  std::thread t(thread_func, std::ref(val));

  t.join();

  std::cout << "原始参数为:" << val << std::endl;

  return 0;

}

输出结果:


传入的参数为:10

修改后的参数为:11

原始参数为:11

需要注意的是,使用引用传递时需要使用`std::ref`函数将参数包装为引用类型。

3. 指针传递

C++线程还可以使用指针传递参数,这种方式可以让线程函数访问参数指针所指向的内存区域,可以通过这种方式修改指针所指向的内存。

示例代码:


#include <iostream>

#include <thread>

void thread_func(int* pval) {

  std::cout << "pval所指向的内存值为:" << *pval << std::endl;

  (*pval)++;

  std::cout << "修改后pval所指向的内存值为:" << *pval << std::endl;

}

int main() {

  int val = 10;

  std::thread t(thread_func, &val);

  t.join();

  std::cout << "原始参数为:" << val << std::endl;

  return 0;

}

输出结果:


pval所指向的内存值为:10

修改后pval所指向的内存值为:11

原始参数为:11

需要注意的是,在使用指针传递参数时需要确保指针指向的内存区域在整个线程函数执行期间都是有效的。

总结:

C++线程的参数传递方式有三种:值传递、引用传递和指针传递。不同的传递方式适用于不同的场景,开发者需要根据具体情况选择合适的方式。在使用引用传递和指针传递时需要谨慎,在使用过程中需要注意线程安全问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复