Ste*_*eld 15 .net c# multithreading asynchronous locking
我们有一种情况,我们希望限制应用程序可以对其应用程序服务器进行的并行请求的数量.我们有可能运行100多个后台线程,它们希望在某些时候调用应用程序服务器,但只希望5个线程能够在任何时候调用SendMessage()(或任何方法).实现这一目标的最佳方法是什么?
我考虑过使用某种类型的网守对象来阻止进入该方法的线程,直到在其中执行的线程数已经降到阈值以下.这是一个合理的解决方案还是我忽略了这可能是脏/危险的事实?
我们正在使用C#.NET 3.5进行开发.
谢谢,
史蒂夫
Muh*_*han 19
使用信号量
http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx
限制可以同时访问资源或资源池的线程数.
Lor*_*nVS 11
你想要一个信号量...... System.Threading.Semaphore
public static class MyClass
{
    private static Semaphore sem = new Semaphore(5, 5);
    public static void SendMessage()
    {
        sem.WaitOne();
        try
        {
        }
        finally
        {
            sem.Release(1);
        }
    }
}
或者,如果您只希望单个线程能够在给定时间调用方法,则.NET还会公开与java的synchronized属性等效的概念:
[System.Runtime.CompilerServices.MethodImpl(MethodImpl.Synchronized)]