gpt4 book ai didi

c# - SemaphoreSlim(1) 如何知道是否有其他线程在等待

转载 作者:行者123 更新时间:2023-11-30 20:52:35 26 4
gpt4 key购买 nike

为了同步,我创建了一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com