线程简介
# 线程简介
# 线程概述
定义:一个程序中的多个执行路线叫做线程,线程是一个进程内部的控制序列。
所有的进程都至少有一个执行线程(初始线程)。
初始线程随进程的创建而创建,其他线程则需要通过显式的函数调用来创建。
# 进程 vs 线程
- 当进程执行fork()调用时,将创建该进程的一份完整拷贝,该进程拥有自己的PID和变量,独立调度,执行(几乎)独立于父进程。
- 新线程拥有自己独立的栈(eg.局部变量),但与创建者共享全局变量、文件描述符、信号句柄、当前目录状态。
# 线程的优点
程序呈现出同时做多件事情的特性(并发性)。
某些(包含输入、计算、输出的)应用程序,非常适合使用多线程。
线程切换的代价比进程切换小的多。
# 线程的缺点
变量共享和时序设计需要非常仔细,很容易出现错误。
调试困难。
在单处理器系统中速度不一定能够提高。
# 线程的状态
就绪态:线程能够运行,正在等待处理机资源。可能刚启动,或被其他线程抢占处理器,或从阻塞态恢复。
阻塞态:线程由于等待某些条件而无法运行,例如IO、加锁互斥量或其他条件。
运行态:正在运行。在多处理机系统中,可能有多个线程处于运行态。
终止态:线程从起始函数返回、或调用pthread_exit()函数、或被取消。
# 线程的状态迁移图
# 多线程程序设计方法
线程支持:
线程由一套完整的函数库支持,其中绝大部分函数以“pthread_”开头。
为了使用这些库函数,代码中必须定义_REENTRANT宏。
程序中要包含头文件pthread.h。
编译时需要使用-lpthread选项。
# 可重入性问题
- 线程编程需要使用可重入的代码,即可以被不同线程调用多次而仍然能正常工作的代码。
- errno被多个线程共享,该变量很容易被不同线程修改,从而引起错误。
- 代码中的静态变量涉及重入性问题,局部变量是可重入的。
编辑 (opens new window)
上次更新: 2023/03/31, 22:34:04
- 01
- Linux系统移植(五)--- 制作、烧录镜像并启动Linux02-05
- 03
- Linux系统移植(三)--- Linux kernel移植02-05