将函数调用作为参数传递给printf&重入

时间:2017-05-31 05:58:18

标签: c multithreading printf reentrancy

据我所知,printf()是线程安全的,不是可重入的。 现在,如果我将函数调用的结果作为参数传递:

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

函数squareofInteger在多线程程序中也会成为线程安全的吗?

1 个答案:

答案 0 :(得分:2)

没有。反:

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

在调用printf之前,不同的线程(同时)评估此函数,并将结果移交给printf