Если вы посвятили себя написанию собственного пула потоков, это, вероятно, не поможет, но я бы попробовал придерживаться класса .NET ThreadPool и настроить его в соответствии с требованиями с помощью SetMaxThreads / SetMinThreads и GetMaxThreads / GetAvailableThreads. Есть ли какая-то конкретная причина, почему это недостаточно хорошо?
Я был в PDC в прошлом году и посетил некоторые из выступлений Джо Даффи по параллелизму, которые были довольно интересными. Я помню, что он говорил о предоставлении расширяемого класса пула потоков в .NET, поскольку MSFT, как правило, обнаруживают, что, когда люди идут и пишут свои собственные пулы потоков, они будут работать нормально большую часть времени, но их поймают в крайних случаях различные ошибки. Предоставляя механизм расширяемости, они надеялись ограничить вероятность того, что разработчики будут пойманы.