1.[个人]C++线程入门到进阶(1)----概念

来源:互联网 发布:对数据标准化 编辑:程序博客网 时间:2024/06/03 04:40

1.线程的基本概念、线程的基本状态及状态之间的关系?

  线程,有时候被称为轻量级进程,是程序执行流的最小单元;
  线程被分为两种,用户界面和工作流程(又称后台线程);
  线程是进程的一个实体,是被系统独立调度和分派的基本单位;
  线程的五种基本状态:新建、就绪、堵塞、运行、死亡;
  就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;
  运行状态是指线程占有处理机正在运行;
  堵塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可行。

  每一个程序至少有一个线程,若程序只有一个线程,那就是程序本身。

---------------------------------------------------------------------------------------------------------------------------------------------------

2.线程与进程对比
  进程是资源分配的基本单位,而线程是程序执行流的最小单位;
  通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。
  (1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某
  进程内的线程在其它进程不可见;
  (2)通信:进程间通信IPC(inter-process communication,进程间通信),线程间可以
  直接读写进程数据段(如全局变量)来进行通信-需要进程同步和互斥手段的辅助,
  来保证数据的一致性;
  (3)调度和切换:线程上下文切换比进程上下文切换快得多;

  (4)在多线程OS中,进程不是一个可执行的实体。

---------------------------------------------------------------------------------------------------------------------------------------------------

3.线程的特点
  (1)轻型实体:线程中的实体不拥有系统资源,只是有一点点必不可少、能保证独立运行的资源。
  (2)独立调度和分派的基本单位:在多线程OS中,由于线程很”轻“,故线程的切换非常迅速且开销小。
  (3)可并发执行:在一个线程中的多个线程之间,可并发执行,
       允许在一个进程中所有线程都能并发执行;
  同样,不同进程中的线程也能并发执行。充分利用了处理机与外围设备并行工作的能力。
  (4)共享进程资源:同一个进程中的各个线程,都可以共享该进程所拥有的资源。
       所有的线程都具有相同的地址空间(进程的地址空间),线程可以访问其父进程所拥有的已

  打开文件、定时器信号量等。

---------------------------------------------------------------------------------------------------------------------------------------------------

4.线程的同步
  (1)工作原理
  线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程与父进程的
  其他线程共享该进程所拥有的全部资源。
  线程可以创建和撤销线程,从而实现程序的并发执行,一般线程具有就绪、运行和堵塞三种基本状态。
  每个线程拥有自己的堆栈、程序计数器和自己的局部变量;
  进程可以直冲多个线程,它们看似同时执行,但互相之间并不同步。
  (2)线程属性

  (3)死亡态:当run()方法返回,或别的线程调用stop()方法,线程进入死亡态。

---------------------------------------------------------------------------------------------------------------------------------------------------

5.线程的本操作
  (1)派生:线程在进程内派生出来,既可由进程派生,也可由线程派生;
  (2)阻塞(block):如果一个线程在执行过程中等待某个事件发生,则被阻塞;
  (3)激活(unlock):如果阻塞线程的事件发生,则线程被激活进入就绪队列。
  (4)调度(schedule):选择一个就绪线程进入执行状态;

  (5)结束(finish):如果一个线程执行结束,它的寄存器上下文及堆栈内容将被释放。

---------------------------------------------------------------------------------------------------------------------------------------------------

6.线程的同步的方式

  (1)关键段CS:

  (2)互斥量Mutex:

  (3)信号量(semaphore):

  (4)事件Event:

 后续章节介绍。。。。。。


0 1
原创粉丝点击