Код ниже неоднократно снимает изоляцию с самого низкого бита, пока число не является питанием два, затем удваивает результат, если число не является питанием два для начала. Это имеет преимущество выполнения во время, пропорциональное количеству набора битов. К сожалению, это имеет недостаток требования большего количества инструкций почти во всех случаях или, чем код в вопросе или, чем предложения блока. Я включаю его только для полноты.
int nextPow(int x) {
int y = x
while (x &= (x^(~x+1)))
y = x << 1;
return y
}
Я бы не стал полагаться на то, что ThreadPool когда-либо сбрасывает информацию, особенно из-за цитируемого вами текста.
Если вы беспокоитесь об «изменении» культуры пула потоков , Я бы обязательно сбросил его, когда ваша многопоточная задача будет завершена. Это достаточно простая задача.
Я не верю, что текущий пул потоков делает это, но даже если бы он сделал , было бы небезопасно предполагать, что реализация ThreadPool в .NET 4+ не будет изменение.