线程学习笔记

编程入门 行业动态 更新时间:2024-10-15 14:12:53

<a href=https://www.elefans.com/category/jswz/34/1771240.html style=线程学习笔记"/>

线程学习笔记

1、线程有时被称为轻量级进程(Lightweight Process,LWT),是程序执行的最小单元;

2、一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成;

3、通常意义下,一个进程由一个或者多个线程组成,各个线程之间共享内存空间(包括代码段、数据段、堆等)以及一些进程级的资源(如文件打开和信号);

4、经典的线程与进程关系图:

 5、线程的访问权限:线程的访问权限是非常自由的,它可以访问进程内存中所有的数据,甚至其他线程的堆栈(如果知道其他线程的堆栈),实际应用中线程也拥有自己的私有的储存空间,包括几个方面:

  • 栈 尽管并非无法被其他的线程访问,但一般可认为是私有数据;
  • 线程局部储存 线程局部储存是某些操作系统为线程单独提供的私有空间,但通常只具有 很有限的空间;
  • 寄存器(包括PC寄存器),寄存器是执行流的基本数据,因此是线程私有

6、线程调度,线程至少有三种状态:

  • 运行:此线程正在执行;
  • 就绪:此线程可以立即执行,但是CPU已经被占用;
  • 等待:此线程正在等待某一个事件(通常是I/O或者同步)发生,无法执行。

处于运行中的线程拥有一段可以执行的时间,这段时间就做时间片(Time Slice),当时间片用尽时候,该线程处于就绪状态;如果在时间片用尽之前,线程就等待某事件,那么它进入等待状态;每当一个线程离开运行状态时,调度系统就会选择其他的就绪的线程继续执行。

7、线程安全 : 原子操作、加锁、信号量、临界区、互斥量、读写锁和条件变量。

8、单例线程安全问题:barrier指令会阻止CPU将该指令前的指令交换到barrier之后。

#define barrier() __asm__ volatile (”lwsync”)
volatile T* pInst = 0;
T* GetInstance(){if (!pInst) {lock();if (!pInst) {T* temp = new T;barrier();pInst = temp;}unlock();}
return pInst;
}

由于barrier的存在,对象的构造一定在barrier之前完成,因此当pInst被赋值时,对象总是完成的。

未完待续..........

更多推荐

线程学习笔记

本文发布于:2024-03-06 05:27:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1714482.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:线程   学习笔记

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!