2017-05-31 2 views
0

À ma connaissance, printf() est threadsafe et non réentrant. Maintenant, si je passe le résultat d'un appel de fonction en tant que paramètre comme ceci:Appel de fonction de passage en tant que paramètre pour printf & Reentrancy

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

sera la fonction squareofInteger également devenir threadsafe dans un programme multithread?

+6

Réponse courte: non, 'squareOfInteger()' doit être thread-safe par lui-même. – Stargateur

+0

Pourquoi le croyez-vous? ... Quel genre de magie imaginez-vous derrière printf? ... – LPs

+2

OP, pouvez-vous expliquer ce que vous entendez par "threadsafe" et "non reentrant"? Surtout comment cela pourrait être changé de dangereux à sûr en étant appelé à partir d'une autre fonction. Nous semblons avoir une compréhension différente de ces termes. – Yunnosch

Répondre

2

No. Contre-exemple:

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

Cette fonction est évaluée par différents threads (simultanément) avant printf est appelé et est remis sur le résultat de printf.