C 資料庫連線池 執行緒安全 單例模式 的實現

2022-09-02 09:33:13 字數 1667 閱讀 7840

本文介紹3種執行緒安全模式

1,lock

2,mutex

3,methodimpl

以前寫的乙個mysql資料庫連線池connectionpool.cs

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.io;

using

system.threading;

using

mysql.data.mysqlclient;

using

system.runtime.compilerservices;

namespace

queue.service.basic

}[methodimpl(methodimploptions.synchronized)]

public

static

connectionpool getinstance()

return

connpool;

}public

mysqlconnection getconnection()

else

catch

(exception e)}}

conn =(mysqlconnection)pool.pop();

}return

conn;

}private

string

getconnstring()

return

connstring;

}public

void

releaseconnection(mysqlconnection conn)

}private

mysqlconnection createconnection()}}

}

總結:1,上面類中使用了 主要使用了 lock 方式。

lock()是對乙個物件加互斥鎖,只允許乙個執行緒訪問其後大括號中語句塊,直到該語句塊的**執行完才解鎖,解鎖後才允許其他的執行緒執行其語句塊。

2,單例模式使用了懶漢模式。

餓漢式是在類裝載的時候直接得到該類的例項,可以說是前期繫結的;懶漢式是後期繫結的,類載入的時候connpool是空的,在需要的時候才被建立且僅建立一次。餓漢式的速度快,效率高,但是耗費系統資源;懶漢式則相反。懶漢式還存在乙個問題,就是後期繫結不能確保物件只能被例項化一次,這需要對指示類是否例項化的標誌設定1個互斥鎖,僅允許1個執行緒訪問。這樣就可以確保物件只被例項化一次。

3,單例模式的執行緒安全使用了 methodimpl。

他指定了getinstance()方法同時只能被乙個執行緒使用。

4,使用mutex類進行同步

修改**為:

private

static mutex mutex = new

mutex();

public

static

connectionpool getinstance()

mutex.releasemutex();

return

connpool;

}

執行緒池 資料庫連線池

執行緒池的原理 來看一下執行緒池究竟是怎麼一回事?其實執行緒池的原理很簡單,類似於作業系統中的緩衝區的概念,它的流程如下 先啟動若干數量的執行緒,並讓這些執行緒都處於睡 眠狀態,當客戶端有乙個新請求時,就會喚醒執行緒池中的某乙個睡眠執行緒,讓它來處理客戶端的這個請求,當處理完這個請求後,執行緒又處於...

執行緒池 資料庫連線池

執行緒池原理 先啟動若干數量的執行緒,並讓這些執行緒都處於睡眠狀態,當客戶端有乙個新請求時,就會喚醒執行緒池中的某乙個睡眠執行緒,讓它來處理客戶端的這個請求,當處理完這個請求後,執行緒又處於睡眠狀態。資料庫連線池原理 資料庫連線池的解決方案是在應用程式啟動時建立足夠的資料庫連線,並講這些連線組成乙個...

執行緒池 和資料庫連線池

執行緒池的原理 來看一下執行緒池究竟是怎麼一回事?其實執行緒池的原理很簡單,類似於作業系統中的緩衝區的概念,它的流程如下 先啟動若干數量的執行緒,並讓這些執行緒都處於睡眠狀態,當客戶端有乙個新請求時,就會喚醒執行緒池中的某乙個睡眠執行緒,讓它來處理客戶端的這個請求,當處理完這個請求後,執行緒又處於睡...