C/C++教程

并发编程从零开始(六)-BlockingDeque+CopyOnWrite

本文主要是介绍并发编程从零开始(六)-BlockingDeque+CopyOnWrite,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

并发编程从零开始(六)-BlockingDeque+CopyOnWrite

5.2 BlockingDeque

BlockingDeque定义了一个阻塞的双端队列接口:

image-20211027144614052

该接口继承了BlockingQueue接口,同时增加了对应的双端队列操作接口。该接口只有一个实现,就是LinkedBlockingDeque,其核心数据结构如下所示,是一个双向链表。

image-20211027144914254

对应的实现原理,和LinkedBlockingQueue基本一样,只是LinkedBlockingQueue是单向链表,而LinkedBlockingDeque是双向链表。


5.3 CopyOnWrite

CopyOnWrite指在“写”的时候,不是直接“写”源数据,而是把数据拷贝一份进行修改,再通过悲观锁或者乐观锁的方式写回。那为什么不直接修改,而是要拷贝一份修改呢?这是为了在“读”的时候不加锁,典型的空间换时间。

5.3.1 CopyOnWriteArrayList

和ArrayList一样,CopyOnWriteArrayList的核心数据结构也是一个数组:

image-20211027145253619

读取数据的方法有:

image-20211027145327770

所有读的方法都没有加锁,但是所有的修改操作都加了锁。

image-20211027151752992

image-20211027151804294

其他修改方法,例如remove和add类似,此处不再详述。

5.3.2 CopyOnWriteArraySet

CopyOnWriteArraySet 就是用 Array 实现的一个 Set,保证所有元素都不重复。其内部是封装的一个CopyOnWriteArrayList。

image-20211027151923141

这篇关于并发编程从零开始(六)-BlockingDeque+CopyOnWrite的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!