线程死锁
线程死锁的4
个必要条件:
互斥
:一个资源每次只能被一个进程使用占有且等待
:一个进程本身占有
资源(一种或多种),同时还有资源未得到满足,正在等待
其他进程释放该资源不可抢占
:别人已经占有了某项资源,你不能因为自己也需要该资源,就去把别人的资源抢过来循环等待
:存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。
进程和线程的区别:
- 进程是
操作系统资源分配
的最小单位,线程是CPU调度
的最小单位。 - 进程有独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护
代码段__TEXT
、堆栈段
和数据段__DATA
,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU
切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多 - 线程之间的通信更方便,同一进程下的线程共享
全局变量
、静态变量
等数据。
互斥锁和自旋锁
互斥锁
:同一时刻只能有一个线程获得互斥锁,其他线程处于挂起状态。
这期间涉及上