死锁、活锁与饥饿

死锁 deadlock

死锁指两个或两个以上进程(或线程)持有或者循环持有彼此资源,导致相互等待现象,如无外力介入,系统不会自行解除等待状态。


活锁 livelock

活锁指的是进程(或线程)没有别阻塞等待,由于某些条件没有满足,导致一直重复尝试-失败-尝试-失败的过程。处于活锁的实体是在不断的改变状态,活锁有可能自行解开。

  • 解决方案
    • 引入一些随机性
    • 约定重试机制,制定全局规则,避免再次冲突

饥饿 starving

一直在等待,但是获取不到资源,导致任务无法执行,如:优先级高的线程一直在插队,导致低优先级的线程无法获得执行机会。Java中的非公平锁,就有可能导致饥饿出现。另外,如果一个线程获得资源后,持续持有不释放,其他竞争该资源的线程也是出于饥饿状态。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容