理解并发
这是我在开发者头条看到的。@编程原理林振华
有目标的提升自己会事半功倍,前行的道路并不孤独。
1、阻塞
当一个线程进入临界区(公共资源区)后,其他线程必须在临界区外等待,待进去的线程执行完成任务离开临界去后,其它线程才能进去。
2、无饥饿
线程排队先来后到,不管优先级大小,先来先执行,,就不会产生饥饿等待资源,也即公平锁;相反非公平锁则是根据优先级来执行,有可能排在前面的低优先级线程被后面的高优先级插队,形成饥饿。
3、无障碍
共享资源不加锁,每个线程都可以*读写,当监测到被其他线程修改过,则回滚操作,重试直到单独操作成功;当多个线程同时读写,容易造成死循环。
4、无锁
无锁是无障碍的加强版,无锁级别保证至少有一个线程在有限操作步骤内成功退出,不管是否修改成功,这样保证了多个线程回滚不至于导致死循环。
5、无等待
无等待是无锁的升级版,并发编程的最高境界,无锁只保证有线程能成功退出,但存在低级别的线程一直处于饥饿状态,无等待则要求所有线程必须在有限步骤内完成退出,让低级别的线程有机会执行,从而保证所有线程都能运行,提高并发度。