ila*_*sch 2 c# multithreading synchronization semaphore
为了同步,我创建了一个 SemaphoreSlim(1)。
这意味着如果我的班级中有这个信号量的单个实例作为锁:
private SemaphoreSlim _initializationSemaphore = new SemaphoreSlim(1);
private bool _isInitialized = false;
public void Initialize()
{
await _initializationSemaphore.WaitAsync();
if (_isInitialized)
{
_logger.Warn("SDK is already initialized");
}
//Do some logic only once and only ..
_isInitialized=true;
_initializationSemaphore.Release();
}
Run Code Online (Sandbox Code Playgroud)
第一个进入函数的线程将继续运行代码,其他线程将无法进入函数,直到第一个线程释放信号量。
我的问题是 - 我怎么知道当前有多少线程卡在:
await _initializationSemaphore.WaitAsync();
Run Code Online (Sandbox Code Playgroud)
谢谢。
对于快速而肮脏的事情,只保留一个保存计数的静态变量怎么样?
private SemaphoreSlim _initializationSemaphore = new SemaphoreSlim(1);
private bool _isInitialized = false;
private static int _waitingThreads = 0;
public void Initialize()
{
try
{
Interlocked.Increment(ref _waitingThreads);
await _initializationSemaphore.WaitAsync();
}
finally
{
Interlocked.Decrement(ref _waitingThreads);
}
if (_isInitialized)
{
_logger.Warn("SDK is already initialized");
}
//Do some logic only once and only ..
_isInitialized=true;
_initializationSemaphore.Release();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3554 次 |
| 最近记录: |