鎖7 分段鎖(一種鎖的形式)

2021-10-16 16:18:04 字數 513 閱讀 4598

1、概念:

分段鎖其實是一種鎖的設計,並不是具體的一種鎖,對於concurrenthashmap而言,其併發的實現就是通過分段鎖的形式來實現高效的併發操作。

我們以concurrenthashmap來說一下分段鎖的含義以及設計思想,concurrenthashmap中的分段鎖稱為segment,它即類似於hashmap(jdk7和jdk8中hashmap的實現)的結構,即內部擁有乙個entry陣列,陣列中的每個元素又是乙個鍊錶;同時又是乙個reentrantlock(segment繼承了reentrantlock)。

當需要put元素的時候,並不是對整個hashmap進行加鎖,而是先通過hashcode來知道他要放在哪乙個分段中,然後對這個分段進行加鎖,所以當多執行緒put的時候,只要不是放在乙個分段中,就實現了真正的並行的插入。

但是,在統計size的時候,可就是獲取hashmap全域性資訊的時候,就需要獲取所有的分段鎖才能統計。

分段鎖的設計目的是細化鎖的粒度,當操作不需要更新整個陣列的時候,就僅僅針對陣列中的一項進行加鎖操作。

對互斥鎖的一種封裝

include typedef pthread t mutex t 主要用於定義互斥鎖的定義,以及提供加鎖解鎖的介面 class sth mutex sth mutex private int lock int unlock int destroy private mutex t mutex end...

一種簡單的跨平台互斥鎖

前言 互斥鎖,用來保證任一時刻只有單個執行緒或程序擁有對共享資源的互斥訪問權,在這裡將posix thread中的互斥體 win32中的互斥體和臨界區,統稱為互斥鎖,其特點如下 範圍 執行緒鎖和程序鎖,前者僅用於同一程序內多執行緒間,而後者用於程序間,顯然,它也能用於同一程序內多執行緒間,但效率較低...

基於redis的一種分布式鎖

前言 本文介紹了一種基於redis的分布式鎖,利用jedis實現應用 本文應用於多客戶端 乙個redis的架構,並未考慮在redis為主從架構時的情況 一 基本原理 1 用乙個狀態值表示鎖,對鎖的占用和釋放通過狀態值來標識。2 redis採用單程序單執行緒模式,採用佇列模式將併發訪問變成序列訪問,多...