gpt4 book ai didi

c# - 一个只允许N个并发线程的函数

转载 作者:可可西里 更新时间:2023-11-01 07:51:04 25 4
gpt4 key购买 nike

我有一个 Visual Studio 2008 C# .NET 3.5 项目,其中一个类监听来自另一个多线程类的事件调用。我需要确保我的事件最多只允许同时访问 10 个线程。第 11 个线程应该阻塞,直到 10 个线程中的一个完成。

myobj.SomeEvent += OnSomeEvent;

private void OnSomeEvent(object sender, MyEventArgs args)
{
// allow up to 10 threads simultaneous access. Block the 11th thread.
using (SomeThreadLock lock = new SomeThreadLock(10))
{
DoUsefulThings(args.foo);
}
}

我无法控制其他 MyObj 类,所以我无法在那里实现线程池。

实现它的最佳方法是什么?

谢谢,保罗H

最佳答案

你想要 Semaphore class .简而言之,它是一把锁,任何时候都只允许指定数量的调用者通过。

由于您无法控制线程的创建,因此您确实需要注意死锁情况。信号量不是可重入感知的——如果给定线程多次进入信号量,它将占用多个槽。因此,如果您的每个调用者的线程都多次进入您的信号量,则可能会出现死锁。

关于c# - 一个只允许N个并发线程的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10176898/

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