作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了同步,我创建了一个 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();
}
第一个进入函数的线程会继续运行代码,其他线程只有在第一个线程释放信号量后才能进入函数。
我的问题是 - 我怎么知道目前有多少线程卡在了:
await _initializationSemaphore.WaitAsync();
谢谢。
最佳答案
对于一些快速而肮脏的事情,只保留一个保存计数的静态变量怎么样?
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();
}
关于c# - SemaphoreSlim(1) 如何知道是否有其他线程在等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20774230/
我是一名优秀的程序员,十分优秀!