当前位置:   article > 正文

【并发编程十五】无锁数据结构(1)——无锁栈

无锁数据结构

一、无锁数据结构体的优点和缺点

1、优点

  • 最大限度实现并发

在基于锁的容器上,若某个线程还未完成操作,就大有可能阻塞另一线程,使之陷入等待而无法处理;而且,互斥锁的根本意图是杜绝并发功能。在无锁数据结构上,总是存在某个线程能执行下一操作。

  • 代码的健壮性

假设数据结构的写操作受锁保护,如果线程在持锁期间终止,那么该数据结构只完成了部分改动,且此后无从修补。但是(五锁数据结构),若某线程操作无锁数据时意外终结,则丢失的数据仅限于它持有的部分,其他数据依然完好,能被别的线程正常处理。
无锁数据结构不含锁,因此不会出现死锁

2、缺点

  • 难度大
    对线程安全的无锁数据结构执行写操作,难度远远高于对带锁的数据结构体执行写操作。

eg.需留心施加在各项操作上的内存次序约束。

  • 活锁

由于无锁数据结构完全不含锁,因此不可能出现死锁,但活锁反而有机会出现。假设两个线程同时修改同一份数据结构,若他们所做的改动都导致对方从头开始操作,那双方就会反复循环,不断重试,这种现象即为活锁。
活锁出现与否完全取决于线程的调度次序,故往往只会短暂存在。因此,它们不仅降低了程序性能,尚不至于造成严重的问题࿰

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/877165
推荐阅读
相关标签
  

闽ICP备14008679号