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