2017-05-31 131 views
0

据我所知,printf()是线程安全的,不可重入。 现在,如果我通过一个函数调用的结果是这样的参数:将函数调用作为参数传递给printf&Reentrancy

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

将功能squareofInteger也是在多线程程序成为线程安全的?

+6

简短回答:不,''squareOfInteger()'需要自己线程安全。 – Stargateur

+0

你为什么这么认为?...你在printf背后想到了什么样的魔法?...... – LPs

+2

OP,你能解释一下你的意思吗?“threadsafe”和“non-reentrant”?尤其是如何通过从另一个函数调用来将其从不安全变为安全。我们似乎对这些术语有不同的理解。 – Yunnosch

回答

2

号反例:

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

这个功能是由不同的线程(同时)进行评价printf之前被调用,并将结果交给printf

相关问题