使用SemaphoreSlim控制初始例項資源數量

2021-10-02 05:42:42 字數 1217 閱讀 6869

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

using system.threading;

namespace threading

console.

readline()

;}// 可以同時授予的訊號量的初始請求數。

static

semaphoreslim semaphoreslim =

newsemaphoreslim(3

);static

void

accessdatabase

(string name,

int seconds)

waits to access a database"

, name)

; semaphoreslim.

wait()

; console.

writeline

(" was granted an access to a database"

, name)

; thread.

sleep

(timespan.

fromseconds

(seconds));

console.

writeline

(" is completed"

, name)

; semaphoreslim.

release()

;}}}

輸出

當主程式啟動時,建立了semaphoreslim的乙個例項,並在建構函式中指定允許的併發執行緒數量。然後啟動6個不同名稱和不同初始執行時間的執行緒。

在測試中我們模擬的是連線資料庫。

每個執行緒都嘗試獲取資料庫的訪問,但是我們借助於訊號系統限制了訪問資料庫的併發數為3個執行緒,當有第3個執行緒獲取了資料庫的訪問後,其餘3個執行緒需要等待直至有執行緒釋放資源。並且需要顯示呼叫 semaphoreslim.release()來釋放。

C 多執行緒同步 三 SemaphoreSlim

當多個任務或執行緒並行執行時,難以避免的對某些有限的資源進行併發的訪問。可以考慮使用訊號量來進行這方面的控制 system.threading.semaphore 是表示乙個windows核心的訊號量物件。如果預計等待的時間較短,可以考慮使用semaphoreslim,它則帶來的開銷更小。netfr...

使用GraphEdit使用

1 註冊元件。其實乙個filter就是乙個com元件,所以使用之前需要註冊,可以有兩種方法對元件進行註冊。1.直接使用命令。命令列下輸入 regsvr32 hqtlystd.ax 編譯之後你會在工程目錄下的debug中找到hqtlystd.ax,這個就是要用的filter 即可註冊成功。2.vc6....

MySQL使用學習使用 mysql學習使用

1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...