内核对象的线程同步,比如互斥量、事件对象、信号量对象不会发生死锁 ,为什么呢
2条回答 默认 最新
码上团建 2023-05-25 10:38关注互斥锁、事件对象、信号量对象等内核对象是为了协调多个线程或进程之间对共享资源的访问而设计的,保证线程之间的同步。它们的设计和实现是旨在避免死锁的。
- 互斥锁、事件对象、信号量都是为了协调和同步线程间的访问共享资源而设计,它们能够有效地避免死锁的发生。具体来说:
互斥锁:当某个线程获得了互斥锁之后,在使用共享资源之前会一直保持这个锁,其他线程在想要使用这个资源的时候,会被阻塞,等待该互斥锁的解锁。这样就能避免出现死锁的情况。
事件对象:事件对象通常用于线程之间的通信,该对象有“已触发”和“未触发”两种状态。当某个线程等待事件对象上的信号时,如果事件对象不处于“已触发”状态,该线程就会被阻塞,直到事件被触发。这样就能够有效避免死锁的发生。信号量对象:信号量是一个计数器,它用于协调多个线程对共享资源的访问。当计数器等于0时,线程就会被阻塞。当另一个线程释放信号量时,原先被阻塞的线程就会得到信号量。通过这种方式,信号量可以有效地避免死锁的发生。
因此,互斥锁、事件对象、信号量等内核对象是专门为线程同步和协作而设计的,它们的设计和实现基于防止死锁的前提。你可以参考这篇文章,虽然是Java的,但是原理互通,方便你理解:【JUC并发】2. 不可不说的“锁”事,种类繁多,如何一一突破?
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报