码迷,mamicode.com
首页 > 其他好文 > 详细

并发编程实战——锁分段

时间:2016-07-19 18:44:37      阅读:664      评论:0      收藏:0      [点我收藏+]

标签:

锁分段概述

  在某些情况下,可以将锁分解技术进一步扩展为对一组独立对象上的锁进行分解,这种情况被称为锁分段。例如:ConcurrentHashMap

锁分段的缺点

  与采用单个锁来实现独占访问相比,要获取多个锁来实现独占访问将更加困难并且开销更高。通常,在执行一个操作时最多只需获取一个锁,但在某些情况下需要加锁整个容器,例如当ConcurrentHashMap需要扩展映射范围,以及重新计算键值的散列值要分布到更大的桶集合中时,就需要获取分段锁集合中所有的锁(要获取内置锁的一个集合,能采用的唯一方式是递归)。

举个栗子??

  下面这个StripedMap类中给出了基于散列的Map实现,其中使用了锁分段技术。它拥有N_LOCKS个锁,并且每个锁保护散列通的一个子集。大多数方法,例如get,都只需要获得一个锁,而有些方法则需要获得所有的锁,但并不要求同时获得,例如clear方法的实现(这种清除Map的方式并不是原子操作,因此可能当StripedMap为空时其他的线程正并发地向其中添加元素)。

技术分享

并发编程实战——锁分段

标签:

原文地址:http://www.cnblogs.com/zhengbin/p/5685666.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!