C 基於mysql原生api資料庫連線池的實現

2021-10-05 22:04:10 字數 1677 閱讀 8839

首先連線池是單例的,所以封裝下單例模式。

singleton.hpp

/**

* 單例模式的封裝類

* @tparam t

*/template

<

typename t>

class

singleton

};

然後再實現資料庫連線池。

connectionpool.hpp

#include

"singleton.hpp"

#include

#include

#include

#include

"connection.hpp"

//#include

/** * 資料庫連線池

*/class

connectionpool

:public singleton}}

);}/**

* 獲取乙個資料庫連線

* @return

*/std::shared_ptr

getconnection()

//進行一番嘗試之後,接下來,如果佇列不為空,則隊首連線是有效連線if(

!connections.

empty()

)//接下來是隊列為空的情況

//判斷是否已經大於最大連線數

if(currentconnectionnum < maxconnectionnum)

//接下來當前連線數已經達到最大連線數了,無法建立更多的連線,等待一定的時間

//只有當pred條件為false時呼叫wait(),才會阻塞當前執行緒if(

!conditionvariable.

wait_for

(lock, std::chrono::

milliseconds

(maxwaittime),[

this](

)))//等待成功了,則獲取到那個最新的連線

return

popconnection()

;}/** * 建立乙個連線

* @return

*/std::shared_ptr

createconnection()

//記上當前連線數

currentconnectionnum++

;//連線上,返回

return connection;

}/**

* 釋放資料庫連線

* @param connection

*/void

releaseconnection

(std::shared_ptr connection)

}private

:/**

* 彈出乙個連線,並返回

* @return

*/std::shared_ptr

popconnection()

auto connection = connections.

front()

; connections.

pop();

return connection;}}

;

後續實現orm

iOS資料庫操作 基於C語言API

sqlite3 db nsstring path nssearchpathfordirectoriesindomains nsdocumentationdirectory,nsuserdomainmask,yes firstobject const char cpath path utf8strin...

用 C原生API 寫Symbian日誌檔案

宣告 我們都知道symbian裡沒辦法象pc那樣用printf symtem.out.println 等來列印debug資訊到cmd控制台,那麼我們在debug的時候只能用ceikonenv infomsg 來把資訊輸出到symbian程式的視窗上,但是這個函式只能在模擬器上才起作用,除錯起來也很不...

用 C原生API 寫Symbian日誌檔案

90 程式設計師寫不出無bug的二分查詢程式?程式設計珠璣 第二版 一書第四章中提及過100多名專業程式設計師使用兩個小時的充足時間編寫乙個簡單的二分查詢程式,結果發現90 的人編出的 都有bug,knuth也在他的 sorting and searching 一書中提過,第乙個二分查詢程式在194...