c++多线程如何传递参数(值传递,引用传递)

您所在的位置:网站首页 mje340mje350参数 c++多线程如何传递参数(值传递,引用传递)

c++多线程如何传递参数(值传递,引用传递)

2023-11-02 14:49| 来源: 网络整理| 查看: 265

c++多线程如何传递参数(值传递,引用传递)

转自 chen沉尘【C++多线程】 感谢作者,我只是个搬运工

线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。

线程可以共享进程的内存空间,每个线程都拥有自己的堆栈,所以本文主要分析的问题就是如何在线程中像函数一样传递参数。

关于参数的传递,std::thread的构造函数只会单纯的复制传入的变量,特别需要注意的是传递引用时,传入的是值的副本,也就是说子线程中的修改影响不了主线程中的值。

值传递

主线程中的值,被拷贝一份传到了子线程中。可以看出下面主线程和子线程参数的地址是不同的,因而子线程中值的改变不会对主线程中的值产生影响。

#include #include using namespace std; void test(int ti, int tj) { cout public: int ai; A (int i): ai(i) { } }; //这种情况必须在引用前加const,否则会出错。目前本人的觉得可能是因为临时对象具有常性 void test(const int &ti, const A &t) { cout public: int ai; A(int i) : ai(i) { } }; //接收ref()的那个参数前不能加const,因为我们会改变那个值 void test(int& ti, const A& t) { cout cout public: int ai; A (int i) : ai(i) { cout cout cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3