2017-05-31 2 views
0

Nach meinem Wissen, printf() ist Threadssafe und nicht reentrant. Nun, wenn ich das Ergebnis eines Funktionsaufruf als Parameter wie folgen passieren:Übergeben Funktionsaufruf als Parameter für printf & Reentrancy

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

wird die Funktion squareofInteger auch in einem Multi-Thread-Programm wird THREAD?

+6

Kurze Antwort: Nein, 'squareOfInteger()' muss threadsicher sein. – Stargateur

+0

Warum denkst du das? ... Welche Art von Magie stellst du dir hinter printf vor? ... – LPs

+2

OP, kannst du erklären, was du mit "threadsafe" und "non reentrant" meinst? Vor allem, wie das von unsicher zu sicher geändert werden könnte, indem von einer anderen Funktion aufgerufen wird. Wir scheinen unterschiedliche Begriffe zu haben. – Yunnosch

Antwort

2

No. Counterexample:

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

Diese Funktion wird durch verschiedene Threads ausgewertet wird (gleichzeitig) vor printf wird aufgerufen und das Ergebnis wird an printf übergeben.

Verwandte Themen