首先我們先介紹一下什麼是訊號量:
類似於我們去公共澡堂洗澡,需要先去前台付款拿到儲物櫃的鑰匙,如過沒有空閒的儲物櫃,我們就需要一直等待,直到有別人洗完澡,讓出儲物櫃,這裡的鑰匙就相當於訊號量(有限的數量)。
訊號量可以使共享變數可被指定數量的執行緒訪問。
乙個計數器,乙個等待佇列,三個方法。在訊號量模型裡,計數器和等待佇列對外是透明的,所以只能通過訊號量模型提供的三個方法來訪問它們,這三個方法分別是:init()、down() 和 up()。
init():設定計數器的初始值。對應於semahore 中的初始化。
down():計數器的值減 1;如果此時計數器的值小於 0,則當前執行緒將被阻塞,否則當前執行緒可以繼續執行。對應於 acquire
up():計數器的值加 1;如果此時計數器的值小於或者等於 0,則喚醒等待佇列中的乙個執行緒(而不是所有執行緒,如果喚醒所有的執行緒,此時可能不符合臨界條件),並將其從等待佇列中移除。對應於release
互斥是一種初始值為1的訊號量
public class datasourcepool {
private final copyonwritearraylistlist;
//用到了訊號量
private final semaphore semaphore;
public datasourcepool(int size) throws sqlexception {
list = new copyonwritearraylist<>();
semaphore = new semaphore(size);
for (int i=0;i可以看下這個部落格
比較老的有cp30,dbcp 連線池,不建議使用,效能一級監控都不是太好。
新的:阿里巴巴的druid , springboot預設使用的連線池 hikaricp
公式:連線數 = ((核心數 * 2) + 有效磁碟數)
實現簡版 call
在學習 this 指向時,我們知道如果乙個函式作為物件的方法執行時,this 指向這個物件 那麼實現 call 可以參考這個思路 1.在物件上新增函式 2.執行物件方法 3.刪除為了改變 this 而在物件上新增的函式 實現如下 1 這裡要用 function 不能用箭頭函式,要通過 this 獲取...
極簡版shared ptr實現
程式如下 標頭檔案 ifndef pch h define pch h include includeusing namespace std class like shared ptr 接受指標的建構函式 like shared ptr string a location a number new ...
Springboot ELK實現日誌系統簡單搭建
前面簡單介紹了elk三劍客中的其中兩個elasticsearch和kibana的簡單使用,如果對這兩個不了解,可以看下下面的 centos7安裝elasticsearch和kibana 搜尋引擎基礎 分詞和倒排索引簡述 elasticsearch基礎入門 現在來看看這最後乙個logstash 還是這...