进程是资源分配的基本单位,而线程而是CPU调度的基本单位。
进程启动,就会创建一个线程,就是主线程,主线程可以通过系统调用pthread_create来创建其他线程。
进程中所有的线程都有自己的线程栈,用于保存自己的私有数据;但是统一进程的多个线程是共享进程的资源,包括数据段、代码段、堆、文件描述符等。
线程拥有id,成为TID。TID只保证在进程内部的唯一。
多线程的关系
不同于进程,有父子关系;同一个进程中的多个线程之间是平等的,不存在层级关系。任何线程都可以对统一进程中的其他线程进行某些管理操作:
- 创建线程:通过系统调用pthread_create来创建新线程,获得新线程的TID。
- 终止线程:通过系统调用pthread_cancel请求指定TID的线程停止执行,这个操作其实就是通知,听不听话、什么时候听话取决于另一线程的实现。
- 连接已终止的线程:通过系统调用pthread_join,等待指定线程ID的线程终止,并且获得指定线程的返回值。
- 分离线程:使得指定TID的线程不可以被连接,目的在于让操作系统内核在目标线程终止时,能够自动清理和销毁。通过系统调用pthread_detach来完成。
网友评论