Этот метод не использует потоки или sprintf. Помимо проблем с блокировкой, потоки несут накладные расходы на производительность и действительно являются излишним. Для потоков накладные расходы связаны с необходимостью создания парового и потокового буфера. Для sprintf накладные расходы связаны с необходимостью интерпретации строки формата. Это работает даже тогда, когда n отрицательно или когда строковое представление n длиннее len . Это самое быстрое решение.
inline string some_function(int n, int len)
{
string result(len--, '0');
for (int val=(n<0)?-n:n; len>=0&&val!=0; --len,val/=10)
result[len]='0'+val%10;
if (len>=0&&n<0) result[0]='-';
return result;
}