赞
踩
在基于锁的容器上,若某个线程还未完成操作,就大有可能阻塞另一线程,使之陷入等待而无法处理;而且,互斥锁的根本意图是杜绝并发功能。在无锁数据结构上,总是存在某个线程能执行下一操作。
假设数据结构的写操作受锁保护,如果线程在持锁期间终止,那么该数据结构只完成了部分改动,且此后无从修补。但是(五锁数据结构),若某线程操作无锁数据时意外终结,则丢失的数据仅限于它持有的部分,其他数据依然完好,能被别的线程正常处理。
无锁数据结构不含锁,因此不会出现死锁
eg.需留心施加在各项操作上的内存次序约束。
由于无锁数据结构完全不含锁,因此不可能出现死锁,但活锁反而有机会出现。假设两个线程同时修改同一份数据结构,若他们所做的改动都导致对方从头开始操作,那双方就会反复循环,不断重试,这种现象即为活锁。
活锁出现与否完全取决于线程的调度次序,故往往只会短暂存在。因此,它们不仅降低了程序性能,尚不至于造成严重的问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。