shell指令碼(14)-正則表示式
阿新 • • 發佈:2021-08-07
參考網址:https://www.cnblogs.com/Alicia-meng/p/13330640.html
- 使用SemaphoreSlim 實現
- 當多個任務或執行緒並行執行時,難以避免的對某些有限的資源進行併發的訪問。可以考慮使用訊號量來進行這方面的控制(System.Threading.Semaphore)是表示一個Windows核心的訊號量物件。如果預計等待的時間較短,可以考慮使用SemaphoreSlim,它則帶來的開銷更小。.NetFrameWork中的訊號量通過跟蹤進入和離開的任務或執行緒來協調對資源的訪問。訊號量需要知道資源的最大數量,當一個任務進入時,資源計數器會被減1,當計數器為0時,如果有任務訪問資源,它會被阻塞,直到有任務離開為止。
如果需要有跨程序或AppDomain的同步時,可以考慮使用Semaphore。Semaphore是取得的Windows 核心的訊號量,所以在整個系統中是有效的。它主要的介面是Release和WaitOne,使用的方式和SemaphoreSlim是一致的。
- 當多個任務或執行緒並行執行時,難以避免的對某些有限的資源進行併發的訪問。可以考慮使用訊號量來進行這方面的控制(System.Threading.Semaphore)是表示一個Windows核心的訊號量物件。如果預計等待的時間較短,可以考慮使用SemaphoreSlim,它則帶來的開銷更小。.NetFrameWork中的訊號量通過跟蹤進入和離開的任務或執行緒來協調對資源的訪問。訊號量需要知道資源的最大數量,當一個任務進入時,資源計數器會被減1,當計數器為0時,如果有任務訪問資源,它會被阻塞,直到有任務離開為止。
private static readonly SemaphoreSlim _mutex = new SemaphoreSlim(1);
static int _value;
public async static Task DelayAndIncrementAsync()
{
await _mutex.WaitAsync();
try
{
var oldValue = _value;
await Task.Delay(TimeSpan.FromSeconds(oldValue));
Console.WriteLine(_value);
_value = oldValue + 1;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
_mutex.Release();
}
}