|
|
|
![]() |
|
Strumenti |
![]() |
#121 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Il thread che è stato lanciato viene interrotto dopo la creazione...entra in esecuzione il thread principale che dealloca la memoria...il thread che è stato lanciato ritorna in esecuzione e legge il valore della memoria già deallocata ed il contenuto non è garantito ![]() Allocando e deallocando presupponi che la lettura del valore avvenga prima della deallocazione...quindi hai fatto una supposizione sull'ordine di esecuzione dei thread e quindi sei già in errore... |
|
![]() |
![]() |
![]() |
#122 | |
Senior Member
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
|
Quote:
mandare un pacchetto ad uno o piu' destinazioni data una sorgente. Il pacchetto deve essere segmentato per tutti gli host e caricata la rete a seconda della bandwith in modo che il pacchetto arrivi alle destinazioni nel modo piu' veloce possibile...(o almeno si spera ![]() Limiti a questa implementazione: - tutti gli host sono collegati con la sorgente, ma non e' detto che tutti gli host siano collegati tra di loro - la velocita' della rete (e di tutte le interconnessioni) e' nota alla sorgente - il software non tiene conto delle dinamiche della rete, se mentre sta trasferendo una parte di rete si satura lui non ricalcola un altro tragitto. Vi assicuro che non e' stato semplice...tra qualche giorno ve lo do da testare se ne avrete la voglia e il tempo...solo per Linux! ![]() |
|
![]() |
![]() |
![]() |
#123 | |
Senior Member
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#124 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#125 | |
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
Vuoi sapere come la memoria viene gestita dal kernel ??? Da bash digita: memusage -p output.png -t -T <eseguibile>
__________________
Gnu/Linux User ![]() |
|
![]() |
![]() |
![]() |
#126 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#127 | |
Senior Member
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
|
Quote:
Ti faccio un esempio: abbiamo una sorgente S e 2 destinazioni D1 e D2 tra S e D1 c'e' una bandwith di 50 KB/s e cosi' anche tra S e D2. Tra D1 e D2 invece c'e' una bandwith di 100 Kb/s. Ora se spedisci normalmente 100 Kb a D1 e a D2 ci metti 2 secondi giusto? Piu' o meno chiaramente... Se pero' mandi il 50% a D1 a 50 Kb/s e il restante 50% lo mandi a D2 sempre a 50 Kb/s e poi tra D1 e D2 si scambiano i rispettivi 50% usano meta' banda a testa e cosi' in (circa) 1 secondo si fa tutto. Capito ora? |
|
![]() |
![]() |
![]() |
#128 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Cioè un classico problema di ottimizzazione...
|
![]() |
![]() |
![]() |
#129 | |
Senior Member
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
|
Quote:
|
|
![]() |
![]() |
![]() |
#130 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Comunque l'utilizzazione nel campo pratico è alquanto limitata...
|
![]() |
![]() |
![]() |
#131 |
Senior Member
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
|
Scusate dopo tante domande intelligenti una stupida: come si fa a cambiare colore di quello che stampi a video con la printf?
|
![]() |
![]() |
![]() |
#132 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Con la printf non si fa...
Sotto Linux c'è la libreria ncurses che dovrebbe avere qualcosa in proposito... Altrimenti giù di assembler ![]() |
![]() |
![]() |
![]() |
#133 |
Senior Member
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
|
Toglietemi una curiosita':
ma se io faccio una malloc di una struttura e poi non faccio la free, al termine del programma la memoria torna disponibile oppure rimane occupata fino a quando non riavvio il pc? |
![]() |
![]() |
![]() |
#134 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Dovebbe tornare disponibile...almeno così succede in Windows...
|
![]() |
![]() |
![]() |
#135 |
Senior Member
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
|
Scusate un'altra cosa:
ma io se ho collegato un host con un altro, i due host possono spedirsi dei messaggi contemporaneamente usando la stessa connessione o devono farlo uno per volta? Esempio A collegato con B: A spedisce msg1 a B B spedisce msg2 a A il tutto contemporaneamente e usando la stessa connessione...si puo' fare? I messaggi vengono recapitati correttamente? |
![]() |
![]() |
![]() |
#136 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Certo che può avvenire in contemporanea !!!
|
![]() |
![]() |
![]() |
#137 |
Senior Member
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
|
Ok, ma perche' cavolo se A deve spedire a B e B non ha fatto una read prima della write di A .... B non riceve il messaggio? Cio' e' grave io come cavolo faccio a sapere se B e' in attesa oppure no?
|
![]() |
![]() |
![]() |
#138 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Basta non fare le recv bloccanti
![]() Altrimenti con la select : Codice:
fd_set rTest; TIMEVAL t; FD_ZERO(&rTest); FD_SET(recvSocket, &rTest); rTest.fd_count = 1; t.tv_sec = 1; //il timeout è di un secondo t.tv_usec = 0; if(select(0, &rTest, NULL, NULL, &t) != 1) { /*timeout*/ } else { /*qui fai la receive*/ /*se la receive torna 0 byte allora errore*/ } |
![]() |
![]() |
![]() |
#139 | |
Senior Member
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
|
Quote:
Codice:
int receiveData(int socketfd, char *msg) { int nread, n; /* lettura */ nread=0; while (1) { if ((n=read(socketfd, &(msg[nread]), MAXSIZE))<0) { if (errno!=EINTR) { char msgerror[1024]; sprintf(msgerror,"read() failed [err %d]",errno); perror(msgerror); fflush(stderr); return(1); } } else { if (n>0) { nread+=n; if ((msg[nread-1]=='/') || (nread>=MAXSIZE)) break; } } } return(0); }; |
|
![]() |
![]() |
![]() |
#140 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Appunto NON le devi fare bloccanti !!!
La select serve per vedere se succede qualcosa su uno dei socket che si inseriscono con FD_SET... |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:26.