2017-05-31 76 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

相關問題