internal void EnsureThreadRequested()
{
int num;
for (int i = this.numOutstandingThreadRequests; i < ThreadPoolGlobals.processorCount; i = num)
{
num = Interlocked.CompareExchange(ref this.numOutstandingThreadRequests, i + 1, i);
if (num == i)
{
ThreadPool.AdjustThreadsInPool(1u);
return;
}
}
}
在ThreadPoolWorkQueue类里的,没用Lock就实现了多线程情况下确保+1操作的一次调用。厉害。
for 循环的另类使用,多线程请求下判断在不超过处理器数量processorCount的情况下总能新增线程一次,但一旦超过了processorCount,又不去新增。太奇技淫巧了。