如果说在操作系统中引入进程的目的,是为了使多个程序能并发执行,以提高资源的利用率和系统吞吐量,那么,在操作系统中再引入线程,则是为了减少程序在并发执行时所付出的时空开销,使操作系统具有更好的并发性。
1.线程的基本概念
线程是“进程”中某个单一顺序的控制流,也被称为轻量进程。
2.线程与进程的比较
比较方面 | 进程 | 线程 |
---|---|---|
资源分配 | 进程是资源分配和拥有的基本单位 | 线程自己基本不拥有系统资源,但它可以访问所属进程所拥有的全部资源 |
调度 | 在没有引入线程的操作系统中,进程是独立调度和分派的基本单位 | 在引入线程后的操作系统中,线程是独立调度和分配的基本单位 |
地址空间 | 进程的地址空间之间相互独立 | 同一进程的各线程间共享进程的地址空间 |
3.线程间的同步与通信
(1)互斥锁。
互斥是一种比较简单的,用于实现进程间对资源互斥访问的机制。
(2)条件变量。
每一个条件变量通常都与一个互斥锁一起使用,亦即在创建一个互斥锁时便联系着一个条件变量。单纯的互斥锁用于短期锁定,主要用来保证对临界区的互斥进入。而条件变量则用于线程的长期等待,直至所等待的资源成为可用的资源。
(3)信号量机制
a.私有信号量。 当某个线程需要利用信号量来实现同一个进程中各线程之间的同步时,可调用创建信号量的命令来创建一私用信号量,其数据结构存放在应用程序的地址空间中。
b.公用信号量。 公用信号量是为了实现不同进程间或不同进程中各线程之间的同步而设置的。