概念:
(一).临界区
临界区用来表示一种公共资源,或者说是一种共享数据。它可以被多个线程使用,但是每一次只能有一个线程能使用它。一旦临界区被占有,那么其他的线程只能等待。
(二).死锁(Deadlock),活锁(Livelock),饥饿(Starvation)
死锁是表示当多个线程互相持有对方所需要的锁,并一直等待的场景。假如有2个线程 A,B。当线程A在执行的过程中持有锁A,并且向下执行程序时需要锁B,那么线程A会等待锁B的释放。这个时候,恰巧线程B持有锁B,并释放的条件的需要持有锁A,那么线程A与B 都会僵持,等待对方释放。这样的场景就产生了死锁。
饥饿是表示,当某一个或者多个线程,由于某些原因(可能是由于优先级,或者一直在等待某个锁的释放等场景)迟迟无法获得所需要的资源的时候,就会产生饥饿。虽然线程的优先级并没法明确的功控制,但是饥饿的情况却时常发生。当然饥饿与死锁比起来,那就是饥饿在将来的某个时间肯定会被执行。
活锁的情况恰恰与上述2中情况不同,上面2种情况是想要却不可得。偏偏活锁却是一种互相谦让的状态。可以想象一个画面,当在大街上碰到一个迎面走来的人时,你会下意识的往左或者往右避免与对方相撞,但在这个时候对方也同时的往左或者往右,恰好与你的动作匹配上,然后2人各自左右谦让,导致一直过不去的场景!!这就是活锁。由于计算机没有人类的那么灵活只会死脑筋的不停谦让,导致资源一直在双方线程内来回跳动,双方都没有持有。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。