成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Binary Semaphore 和 Reentrant Lock 傻傻分不清!

開發 前端
在本教程中,我們將探討二進制信號量(Binary Semaphore)和可重入鎖(Reentrant Lock)。另外,我們會將它們相互比較,看看哪一個最適合常見情況。

[[377702]]

1. 引言

在本教程中,我們將探討二進制信號量(Binary Semaphore)和可重入鎖(Reentrant Lock)。另外,我們會將它們相互比較,看看哪一個最適合常見情況。

2. 什么是二進制信號量

二進制信號量在單個資源的訪問上提供信令機制。換句話說,二進制信號量提供了一種互斥機制,一次只允許一個線程訪問一個關鍵部分。它只保留一個通行證,因此二進制信號量只有兩種狀態:可用(count=1) 和不可用(count=0)。

我們使用Java中的 Semaphore 類來討論一個簡單的二進制信號量的實現 :

  1. Semaphore binarySemaphore = new Semaphore(1); 
  2. try { 
  3.     binarySemaphore.acquire(); 
  4.     assertEquals(0, binarySemaphore.availablePermits()); 
  5. } catch (InterruptedException e) { 
  6.     e.printStackTrace(); 
  7. } finally { 
  8.     binarySemaphore.release(); 
  9.     assertEquals(1, binarySemaphore.availablePermits()); 

在這里,我們可以觀察到,acquire方法將可用許可減少了一個。類似地,release方法將可用許可增加1。

另外,Semaphore 類提供了 fairness 參數。當設置為true時,fairness 參數確保請求線程獲取許可的順序(基于它們的等待時間):

  1. Semaphore binarySemaphore = new Semaphore(1, true); 

3. 什么是重入鎖?

可重入鎖是一種互斥機制,允許線程在沒有死鎖的情況下(多次)重入資源上的鎖。

進入鎖的線程每次增加一個持有計數。類似地,請求解鎖時持有計數減少。因此,資源被鎖定,直到計數器返回到零。例如,讓我們看一個使用Java中 ReentrantLock 類的簡單實現:

  1. ReentrantLock reentrantLock = new ReentrantLock(); 
  2. try { 
  3.     reentrantLock.lock(); 
  4.     assertEquals(1, reentrantLock.getHoldCount()); 
  5.     assertEquals(true, reentrantLock.isLocked()); 
  6. } finally { 
  7.     reentrantLock.unlock(); 
  8.     assertEquals(0, reentrantLock.getHoldCount()); 
  9.     assertEquals(false, reentrantLock.isLocked()); 

這里,lock方法將持有計數增加1,并鎖定資源。類似地,unlock方法減少持有計數,如果持有計數為零,則解鎖資源。當線程重新進入鎖時,它必須請求相同次數的解鎖以釋放資源:

  1. reentrantLock.lock(); 
  2. reentrantLock.lock(); 
  3. assertEquals(2, reentrantLock.getHoldCount()); 
  4. assertEquals(true, reentrantLock.isLocked()); 
  5.  
  6. reentrantLock.unlock(); 
  7. assertEquals(1, reentrantLock.getHoldCount()); 
  8. assertEquals(true, reentrantLock.isLocked()); 
  9.  
  10. reentrantLock.unlock(); 
  11. assertEquals(0, reentrantLock.getHoldCount()); 
  12. assertEquals(false, reentrantLock.isLocked()); 

與Semaphore類類似,ReentrantLock類也支持 fairness 參數:

  1. ReentrantLock reentrantLock = new ReentrantLock(true); 

4. 二進制信號量與重入鎖

4.1. 機制

二進制信號量是一種信令機制,而可重入鎖是一種鎖定機制。

4.2.所有權

沒有線程是二進制信號量的所有者。但是,成功鎖定資源的最后一個線程是可重入鎖的所有者。

4.3. 本質

二進制信號量本質上是不可重入的,這意味著同一個線程不能重新獲取關鍵部分,否則會導致死鎖。另一方面,可重入鎖本質上允許同一線程多次重入鎖。

4.4. 靈活性

二進制信號量通過允許鎖定機制和死鎖恢復的自定義實現,提供了更高級別的同步機制。因此,它為開發人員提供了更多的控制。然而,可重入鎖則是一種低級同步,具有固定的鎖機制。

4.5. 可修改性

二進制信號量支持 wait 和 signal(在Java的Semaphore類中獲取和釋放)等操作,以允許任何進程修改可用的許可證。另一方面,只有鎖定/解鎖資源的同一線程才能修改可重入鎖。

4.6. 死鎖恢復

二進制信號量提供了一種非所有權釋放機制。因此,任何線程都可以釋放二進制信號量的死鎖恢復許可。

相反,在重入鎖的情況下很難實現死鎖恢復。例如,如果可重入鎖的所有者線程進入睡眠或無限等待狀態,就不可能釋放資源,從而導致死鎖情況。

5. 總結

在這篇短文中,我們探討了二進制信號量和可重入鎖。

首先,我們討論了二進制信號量和可重入鎖的基本定義,以及Java中的基本實現。然后,我們根據機制、所有權和靈活性等參數對它們進行了比較。

我們可以肯定地得出結論二進制信號量為互斥提供了一種基于非所有權的信令機制。同時,它還可以進一步擴展,以提供鎖定功能和容易的死鎖恢復。

另一方面,可重入鎖提供了具有基于所有者的鎖定功能的可重入互斥,作為簡單的互斥鎖非常有用。

本文轉載自微信公眾號「鍋外的大佬」,可以通過以下二維碼關注。轉載本文請聯系鍋外的大佬公眾號。

 

責任編輯:武曉燕 來源: 鍋外的大佬
相關推薦

2022-05-05 13:54:37

SPI機制APISPI

2021-05-09 21:57:08

數據倉庫Olap

2021-08-04 09:00:55

閉包Go調用

2022-05-15 21:52:04

typeTypeScriptinterface

2019-06-18 09:45:19

正向代理反向代理IT

2021-03-10 08:56:37

Zookeeper

2021-03-23 10:45:23

CookieSession前端

2021-10-06 23:31:45

HibernateJPASpring Data

2020-03-03 17:35:09

Full GCMinor

2024-02-29 09:08:56

Encoding算法加密

2021-08-02 12:50:45

sessiontokenJava

2021-07-27 07:31:16

JavaArrayList數組

2022-02-25 09:14:33

類變量共享實例變量

2021-04-21 09:00:50

VRAR虛擬現實技術

2018-12-17 12:30:05

Kubernetes存儲存儲卷

2022-04-15 11:47:47

LVSNginx負載均衡

2020-10-30 08:20:04

SD卡TF卡存儲

2020-11-11 07:32:18

MySQL InnoDB 存儲

2023-04-11 15:57:49

JavaScriptCSSHTML

2020-10-10 17:17:14

M.2SAT硬盤
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 开操网| 黄网免费看 | 免费在线观看av | 一区二区三区欧美在线 | 在线日韩av电影 | 精品国产一区二区久久 | 中文字幕不卡在线88 | 亚洲一区二区久久 | 国产欧美精品一区二区 | 91深夜福利视频 | 日韩精品视频一区二区三区 | 亚洲欧美激情精品一区二区 | 欧美综合一区 | h视频在线免费 | 在线不卡视频 | 中文字幕日韩欧美 | 日韩在线不卡视频 | 国产精品久久久久久吹潮 | 日本欧美视频 | 日韩欧美一区在线 | 91精品国产综合久久婷婷香蕉 | 国产黄色小视频 | 9191av| 亚洲情综合五月天 | 亚洲综合天堂网 | 久久国产精品视频 | 欧产日产国产精品视频 | 色资源在线 | 国产午夜精品视频 | 久久国产精品91 | 国产在线精品一区二区三区 | 国产精品久久久久aaaa樱花 | 久久九 | 国产日韩久久 | 夜夜爽99久久国产综合精品女不卡 | 激情综合五月天 | 奇米影视首页 | 国产精品久久久久久妇女6080 | 岛国av免费看 | 亚洲精品第一国产综合野 | 91麻豆精品国产91久久久久久久久 |