0
据我所知,printf()
是线程安全的,不可重入。 现在,如果我通过一个函数调用的结果是这样的参数:将函数调用作为参数传递给printf&Reentrancy
printf("\"%d\" squared is \"%d\".\n", 5, squareOfInteger(5));
将功能squareofInteger
也是在多线程程序成为线程安全的?
据我所知,printf()
是线程安全的,不可重入。 现在,如果我通过一个函数调用的结果是这样的参数:将函数调用作为参数传递给printf&Reentrancy
printf("\"%d\" squared is \"%d\".\n", 5, squareOfInteger(5));
将功能squareofInteger
也是在多线程程序成为线程安全的?
号反例:
int squareOfInteger(int x)
{
static int val;
val = x*x; /* Possible race condition here */
return val;
}
这个功能是由不同的线程(同时)进行评价printf
之前被调用,并将结果交给printf
。
简短回答:不,''squareOfInteger()'需要自己线程安全。 – Stargateur
你为什么这么认为?...你在printf背后想到了什么样的魔法?...... – LPs
OP,你能解释一下你的意思吗?“threadsafe”和“non-reentrant”?尤其是如何通过从另一个函数调用来将其从不安全变为安全。我们似乎对这些术语有不同的理解。 – Yunnosch