java執行緒同步 訊號量(Semaphore)

2021-07-10 18:48:41 字數 891 閱讀 3498

訊號量是一種計數器,用來保護乙個或者多個共享資源的訪問,它是併發程式設計的一種基礎工具。

訊號量通過計數器的方式來對資源進行訪問控制

當其計數器值大於0時,表示有資源可以訪問

當其計數器值等於0時,執行緒將進入休眠狀態直到計數器值大於0

通過訊號量的建構函式指定資源數量:

private final semaphore semaphore  = new semaphore(1);
表示該訊號量的計數器值只能為0或者1,也稱為二進位制訊號量

這樣可以限制每次執行的執行緒只有乙個

訊號量的使用:

private final semaphore semaphore = new semaphore(1);

public void a() catch (interruptedexception e) finally

}

訊號量也有對應的tryacquire()方法,和lock的trylock()一樣

public class testsemaphore 

lock = new reentrantlock();

}public void dosth() catch (interruptedexception e) finally

}/**

* 獲取空閒的資源

** @return 空閒的資源下標,沒有就返回-1

*/private int getresource()

}} catch (exception e) finally

return ret;

}}

執行緒訊號量同步

thread sem.c include include include include define thread number 3 define repeat number 3 define delay time levels 10.0 sem t sem thread number void ...

執行緒同步 訊號量

執行緒同步方法 訊號量不常用,找到個帖子不錯,記錄一下!依賴的標頭檔案 include 函式宣告 sem t 表示訊號量 int sem init sem t sem,int pshared,unsigned int value 名稱 sem init 功能 initialize an unname...

執行緒同步 訊號量

進化版的互斥鎖 1 n 由於互斥鎖的粒度比較大,如果我們希望在多個執行緒間對某一物件的部分資料進行共享,使用互斥鎖是沒有辦法實現的,只能將整個資料物件鎖住。這樣雖然達到了多執行緒操作共享資料時保證資料正確性的目的,卻無形中導致執行緒的併發性下降。執行緒從並行執行,變成了序列執行。與直接使用單程序無異...