2026/08/15 多线程(并发编程)

线程的概念

一个项目中可能很多的功能模块需要同时运行,并且每个模块中都有独立的循环,但是循环内部没有编写退出条件,就会出现死循环的现象,无法让多个模块同时运行,此时可以在一个进程中创建多条线程来解决,进程指的是进行中的程序,也就是说一个程序得到运行就会变为进程。

windows系统和linux系统都是多任务的操作系统,任务(task)就是系统调度器的调度实体,而任务是存在在进程中的,只不过有些进程中只有一个任务,有些进程中则可能会存在多个任务。

操作系统是以进程为单位分配资源的,如果一个进程中只有一个任务,则该任务拥有进程的全部资源,如果进程中有多个任务,则这些任务共享进程的资源。为了可以让进程中的多个任务得到运行,可以把任务放在线程(thread)中,然后由调度器进行调度,而线程是系统调度资源的最小单位。

线程和进程之间的关系,类似于工厂和工人之间的关系,进程好比是工厂,线程就如同工厂中的工人。一个工厂可以容纳多个工人,工厂负责为所有工人提供必要的资源(电力、产品原料、食堂、厕所等),所有工人共享这些资源,每个工人负责完成一项具体的任务,他们相互配合,共同保证整个工厂的平稳运行。

每个进程执行前,操作系统都会为其分配所需的资源,包括要执行的程序代码、数据、内存空间、文件资源等。一个进程至少包含 1个主线程,可以包含n个子线程,所有线程共享进程的资源,各个线程也可以拥有属于自己的私有资源。

image

注意:由于系统分配资源是以进程为单位的,而进程至少会执行一个任务,如果进程没有创建其他线程,则程序中的main函数就是一条线程,也被称为主线程。

线程的创建
用户可以调用线程库中的一个函数实现线程的创建,函数接口叫做:pthread_create()
image
注意:线程使用的是进程的资源,所以进程退出之后线程也会退出,而进程结束的条件之一就是程序的main函数退出,所以也就是当程序中的main函数退出时,其他的线程也会一起退出。

线程的结束
Linux系统提供多种方式让线程终止,其中比较常用的方式是调用pthread_exit()函数,利用该接口可以实现让线程终止的目的。
image
image
image

注意:主线程如果调用该函数也可以被终止,但是不会影响进程中其他线程的运行,但是如果主线程中调用exit(),就会导致进程结束,则所有的线程就会终止。

posted @ 2026-08-16 01:10  !城北徐公.!  阅读(5)  评论(0)    收藏  举报