线程基本概念介绍以及线程创建

进程线程概念:进程相当于一个可执行的程序,一个进程里能够有多个线程,在嵌入式程序里,创建了多个线程。

 

实现并发的手段:1.创造多个进程,相当于同时打开多个可执行文件。

                                2.创造一个进程,但是这一个进程中包含多个线程,类似于嵌入式程序中的创建多个线程一起跑。

 

多进程并发和多线程并发的优缺点

优点

1.线程的启动速度更快,更轻量级

2.系统资源开销更少,执行速度更快

缺点

存在线程共享数据一致性问题。

 

单线程调用:

调用函数版本:

线程创建:调用API创建一个线程,thread是一个类,join()会阻塞主线程,主线程会阻塞,直到子线程执行。

而detch(),不会阻塞主线程,主线程和子线程一起执行,但是当主线程结束的时候,子线程也一起结束。

joinable()会判断是否现在能够创建线程。

调用类版本:

需要在类中定义一个重载运算符。。

注意:不要在子线程中调用从主线程中传入的子线程的主线程的局部参数。因为一旦主线程detach()调用子线程的话,主线程一旦释放那个局部参数的话,子线程中就不能直接调用了。(针对于指针和引用的操作)

 

lambda表达式:只调用一次的函数。

例子   auto (函数名) = []{执行内容}   只是把函数内容换成 lambda表达式的内容。

 

创建线程引入变量

普通方式,用join。

注意点:当引用detach调用开始线程的时候,其中例子中的引用i(ainty)实际上是复制了一个变量(跟类中的引用情况不一样),但是用指针的时候,是直接引用了那个变量的地址。 ——注意用detach的时候,主线程变量改变,子线程变量也一样会改变。最好避免传指针和引用。

使用deatch()调用,变量不要引用,字符串的话,使用string的类。

当要在deatch()调用,调用类的时候,也需要像类似于string一样的,将变量转换成一个类。

创建线程的时候,用构造临时对象的方法传递参数是可行的。

若传递int这种类型的简单参数,建议直接传递。

若传递类对象,避免隐式转换,直接在创建线程这一行将构建出临时对象,如(const A &pmybuf),在函数参数中,需要用引用来接。

 

 

vector (向量)作用:是一个能够封装动态大小数据的顺序容器,可以简单的认为它是一个可以存放任意类型的动态数组。

用法:vector<类型>标识符{最大容量,初始所有值}

list也是类似于vector的一个容器,list:频繁的按顺序插入和删除数据时效率高。vector:容器随机的插入和删除数据效率高。

使用list同样需要加入list的头文件。

多线程的创建方法:首先创建一个容器vector <thread> gree,把thread放入一个容器里进行管理。使用vector需要增加

#include <vector>的头文件

 

在单线程中调用类中的函数作为线程的入口函数

在类中创建一个函数,其中list类似于vector。

在main中创建一个线程,并调用,注意需要加上引用类,因为创建线程以后,同时会创建一个新的对象。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值