进程 线程八股思考
线程有着
1.共享进程资源(打开的文件、地址空间)
2.在进程中并发执行
3.同一个进程中可以同时存在多个线程。
但是线程也有着许多缺点:由于线程共享地址空间,当一个线程由于内存泄漏等问题导致线程崩溃时,C++中的同一个进程中的其他线程也会一起崩溃,这是由于进程崩溃导致的。
当进程中的线程崩溃时,操作系统会向进程发送一个kill相关的信号,这个信号将控制权限由进程转给内核,内核通过cpu将进程暂停、并处理信号函数的相关逻辑,c++线程崩溃会导致进程退出影响其他线程的原因就在这,如果没有注册自定义的信号函数,会按照默认的信号函数,直接kill掉进程,而自己注册的函数可以加入进程恢复、进程安全退出等等操作。
**因此解决线程崩溃的方法:**注册一个信号函数(非法访问内存的信号函数)让线程崩溃时能够处理这个信号函数逻辑,从而实现进程的恢复执行,保护其他线程的继续执行。
其他的方法就是避免出现线程崩溃(访问非法内存、内存泄漏的问题处理)一个是堆内存的重复释放、堆内存没有释放,访问未知地址、访问没有权限的地址等等。