将执行代码的一部分限制为4个线程的最低开销方式是什么?



可能的重复:
限制单个时间执行方法的线程数

在一个单个应用中,我们需要将执行代码的执行限制为4个线程。本节不是线程的开始/结尾,它是线程中的代码部分。

如何使用一个操作很容易 - 创建一个Eventwaithandle并在其上等待/信号。但是我想做的每一种方式都有4个可能需要等待的可能性,另一个线程存在于部分和信号,然后我等待 - 永远。

那么,当所有线程都在一个应用中时,最轻巧的方法是什么?

背景:我们正在更改许可模型,以允许最多n(在本示例中4个)线程连续拨打我们的库。因为我们是库,而不是服务器,所以我们无法控制线程使用情况(例如数据库可以)。在Web应用程序的情况下,调用应用程序也无法控制线程的数量,因此我们需要暂停线程5调用我们,直到第一个4退出该代码。

信号量是螺纹原始的,它将非常适合您。它将允许指定的并发用户数量;额外的用户将阻止。

private static Semaphore _semaphore = new Semaphore(4, 4);

然后,您要共享的代码:

_semaphore.WaitOne();
try
{
    // protected code goes here
}
finally
{
    _semaphore.Release();
}

在开销方面,关于此问题的好处是WaitOne是有效的:它会阻止您的线程正确,并且当某人调用Release

我将使用信号量,如Romkyns所述。但是,信号量下的操作应该很大 - 开销是巨大的。考虑信号量是否适合您的案件(即,如果仅适用于单个过程,请参见Semaphore和Semaphoreslim和MSDN之间的选择)。

)。

主题评论:

这似乎是一个非常不合时宜的许可方案。您想实现什么?许可方案应反映布斯内斯的价值,并谈论并发线程数量似乎很难与管理层进行交流。其次,该许可计划将如何帮助您传达对更多许可的需求?如果您将许可证基于线程数量,则似乎很难监视使用量,这使得很难证明需要向用户提供更多许可证。

相关内容

最新更新