PDA

View Full Version : [C] Thread e malloc


Unrue
04-10-2008, 13:58
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. :)

cionci
06-10-2008, 10:12
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.

Unrue
06-10-2008, 13:55
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..

cionci
06-10-2008, 14:05
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.

cionci
06-10-2008, 14:10
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.

Unrue
06-10-2008, 14:15
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.

cionci
06-10-2008, 14:34
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.