据我所知,printf()
是线程安全的,不是可重入的。
现在,如果我将函数调用的结果作为参数传递:
printf("\"%d\" squared is \"%d\".\n", 5, squareOfInteger(5));
函数squareofInteger
在多线程程序中也会成为线程安全的吗?
答案 0 :(得分:2)
没有。反:
int squareOfInteger(int x)
{
static int val;
val = x*x; /* Possible race condition here */
return val;
}
在调用printf
之前,不同的线程(同时)评估此函数,并将结果移交给printf
。