View Full Version : [C] Thread e malloc
Ciao a tutti,
ho una domanda sulla malloc. Tale funzione è thread-safe? Ad esempio, si supponga che faccio fare malloc contemporaneamente a due thread. Che succede? Posso avere sempre la garanzia che il funzionamento sia corretto?
Potrebbe capitare che un indirizzo di memoria "appartenga" a due malloc?
Grazie.
DanieleC88
05-10-2008, 23:33
Sinceramente ne dubito, le risorse di sistema sono uniche e vanno condivise, se della memoria viene allocata nel momento T, non sarà disponibile a nessun altro nel momento T+1. :)
La memoria come tutte le risorse condivise viene gestita dal sistema operativo, la malloc genererà una system call che andrà ad allocare la memoria. Lo stato dell'esecuzione dell'intero processo verrà salvata e si entrerà in kernel mode per l'assegnazione della risorsa.
ytsejam32
06-10-2008, 13:41
La memoria come tutte le risorse condivise viene gestita dal sistema operativo, la malloc genererà una system call che andrà ad allocare la memoria. Lo stato dell'esecuzione dell'intero processo verrà salvata e si entrerà in kernel mode per l'assegnazione della risorsa.
Non sono sicuro che la malloc generi per forza una system call; dovrebbe essere gestita dalla libc che, se ha necessita' di ulteriore memoria heap, invoca una system call.
Comunque, la malloc dovrebbe essere thread-safe lo stesso, poiche' viene usato un lock.
La memoria come tutte le risorse condivise viene gestita dal sistema operativo, la malloc genererà una system call che andrà ad allocare la memoria. Lo stato dell'esecuzione dell'intero processo verrà salvata e si entrerà in kernel mode per l'assegnazione della risorsa.
Ciao,
non ho ancora capito però se è o no thread-safe :)
In giro c'è chi dice che lo è, e chi dice di no. Boh..
Non sono sicuro che la malloc generi per forza una system call; dovrebbe essere gestita dalla libc che, se ha necessita' di ulteriore memoria heap, invoca una system call.
Comunque, la malloc dovrebbe essere thread-safe lo stesso, poiche' viene usato un lock.
In effetti l'implementazione potrebbe richiedere memoria a blocchi al SO, e poi gestire questi blocchi senza system call.
Andrebbe vista l'implementazione.
http://www.google.it/codesearch?hl=it&q=show:kVJWL6aWapU:IaZ8RiP24eE:WbCnjbGL1vY&sa=N&ct=rd&cs_p=http://ftp.gnu.org/gnu/glibc/glibc-2.3.6.tar.bz2&cs_f=glibc-2.3.6/malloc/malloc.c
Qui dice che è thread safe, infatti usa le mutex...ed è l'implementazione GNU.
http://www.google.it/codesearch?hl=it&q=show:kVJWL6aWapU:IaZ8RiP24eE:WbCnjbGL1vY&sa=N&ct=rd&cs_p=http://ftp.gnu.org/gnu/glibc/glibc-2.3.6.tar.bz2&cs_f=glibc-2.3.6/malloc/malloc.c
Qui dice che è thread safe, infatti usa le mutex...ed è l'implementazione GNU.
Ottimo, grazie :) Dice che è thread safe solo se si attivano i thread in pratica.
Ottimo, grazie :) Dice che è thread safe solo se si attivano i thread in pratica.
Ovviamente, per questioni di performance. S enon ci sono i thread è inutile usare la mutex.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.