|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
[C] printf - single Thread e multi Thread
Ciao a tutti!
Mi sono imbattuto in un problema riguardante la funzione printf() in C sotto ambiente linux. Il problema è il seguente; Considerando la seguente istruzione: printf("ciao");
Qualcuno sa spiegarmi il motivo? Grazie in anticipo! |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
in genere printf fa un flush ogni volta che riceve un carattere newline o quando è necessario (ad esempio il buffer è pieno, o l'applicazione sta per terminare o stai per fare una lettura da tastiera)
non sono sicuro che questo comportamento sia standard, comunque se il buffering è un problema puoi sempre eliminarlo con Codice:
setbuf(stdout, NULL); |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
Da quanto ho letto la printf non è thread-safe.
Il dubbio è nato in quanto ho pensato che anche facendo un ciclo for piuttosto grande, al cui interno faccio la printf senza il carattere newline, teoricamente non dovrebbe stampare nulla finchè o appunto il buffer è pieno oppure fintanto che il ciclo non sia terminato. Invece, con questa porzione di codice per esempio Codice:
int i=0; for (i=0; i<1000000000; i++) { printf("ciao"); } L'unica spiegazione plausibile è che la printf non è thread-safe, per cui ha un comportamento anomalo. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:28.