线程

上篇文章中讲了进程,各进程相互独立,有自己独立的虚拟地址空间,利用多进程编程和进程间通信等手段可以完成一些特定的工作。但多进程也有一些缺点,如下:

因此,为了解决进程的这些问题,就出现了线程。线程被称为轻量级进程,因此可以看出线程的切换没有进程那么大的开销。其主要原因就是线程没有独立的虚拟地址空间,它依附于进程而存在。同一个进程中的所有线程共享代码区,数据区和堆,还有打开的文件描述符,信号处理函数,环境变量,用户ID等,每个线程私有的属性有栈,各种寄存器的值(硬件上下文),errno变量,信号屏蔽字和调度优先级等。

Linux下线程相关的函数有:

因为同一进程中所有线程共享全局变量和堆等数据,所有需要对各个线程进行同步操作。线程同步手段有:互斥量,信号量和条件变量。