在 linux 系统中,线程是最小的调度单元,主线程与进程内的其余线程享受公平调度,同时也允许主线程退出后进程内其余线程继续运行。但是在编程中,当 main 函数 return 之后,所有的线程均会退出。这是因为 main 函数中的 return 和 exit 系统调用是等效的。如果 main 函数正常结束,那么进程内的所有内存、线程描述符等都会被回收,因此其余线程无法继续运行。
但有时候,我们并不希望后台线程直接退出,而是想让其完成一些善后工作。例如在进行图形化编程时,后台有线程正在执行某些操作(如重写文件、使用缓冲区向系统写入数据),我们希望这个操作不存在中间态,而直接阻塞主线程退出会导致图形界面退出时卡住。这种场景下,我们可以使用系统调用pthread_exit
函数使主线程退出时并不会调用 exit,从而避免进程退出。