Передача вызова функции в качестве параметра для 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
,