一段精巧的代码

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操作的一次调用。厉害。
    

《一段精巧的代码》有0个想法

  1. for 循环的另类使用,多线程请求下判断在不超过处理器数量processorCount的情况下总能新增线程一次,但一旦超过了processorCount,又不去新增。太奇技淫巧了。

发表回复