Передача вызова функции в качестве параметра для printf & Reentrancy

Насколько мне известно, printf() является потокобезопасным и не реентерабельным. Теперь, если я передам результат вызова функции в качестве параметра, подобного этому:

printf("\"%d\" squared is \"%d\".\n", 5, squareOfInteger(5));

будет функция squareofInteger также стать потокобезопасным в многопоточной программе?

1 ответ

Контрпример:

int squareOfInteger(int x)
{
    static int val;
    val = x*x; /* Possible race condition here */
    return val;
}

Эта функция оценивается различными потоками (одновременно) перед printf называется и результат передается printf,

Другие вопросы по тегам