View Full Version : [C] dubbi sulla CreateThread()
vi risulta che la funzione CreateThread() abbia dei problemi di memory leak ?
E se affermativo, in quali circostanze?
grazie
banryu79
20-07-2011, 08:36
Ciao, non sono certo un'esperto ma la cosa mi ha incuriosito così ho cercato un po' sul web.
Ecco delle pagine interessanti:
- stackoverflow (http://stackoverflow.com/questions/331536/windows-threading-beginthread-vs-beginthreadex-vs-createthread-c)
- microsoft tchnical support (http://support.microsoft.com/kb/104641/en-us)
- gamedev.net (http://www.gamedev.net/topic/101055-createthread-and-memory-leaks/)
- codeguru.com (http://www.codeguru.com/forum/showthread.php?t=446140)
Ciao, non sono certo un'esperto ma la cosa mi ha incuriosito così ho cercato un po' sul web.
Ecco delle pagine interessanti:
- stackoverflow (http://stackoverflow.com/questions/331536/windows-threading-beginthread-vs-beginthreadex-vs-createthread-c)
- microsoft tchnical support (http://support.microsoft.com/kb/104641/en-us)
- gamedev.net (http://www.gamedev.net/topic/101055-createthread-and-memory-leaks/)
- codeguru.com (http://www.codeguru.com/forum/showthread.php?t=446140)
ciao e grazie,
stavo leggendo anche in merito alla thread-safety ma non è molto chiaro a quali funzioni ci si riferisce.
http://www.iac.rm.cnr.it/sisopii/winthreads.pdf
ma non si possono eliminare i messaggi qui? :<
starfred
20-07-2011, 19:34
vi risulta che la funzione CreateThread() abbia dei problemi di memory leak ?
E se affermativo, in quali circostanze?
grazie
Se ti riferisci alla pthread_create(..) no, non ha memory leak. In ogni caso ti consiglio l'uso di valgrind. Ottimo tool di debug.
vi risulta che la funzione CreateThread() abbia dei problemi di memory leak ?
E se affermativo, in quali circostanze?
grazie
Stiamo parlando di una funzione di libreria introdotta con Windows 2000, credo che se ci fossero stati casi eclatanti di memory leaks se ne sarebbero accorti, o loro, o molti sviluppatori prima di te.
Cos'è che ti porta a pensare una cosa del genere?
Stiamo parlando di una funzione di libreria introdotta con Windows 2000, credo che se ci fossero stati casi eclatanti di memory leaks se ne sarebbero accorti, o loro, o molti sviluppatori prima di te.
Cos'è che ti porta a pensare una cosa del genere?
me lo hanno segnalato ed ho postato anche un documento qualche post sopra
me lo hanno segnalato ed ho postato anche un documento qualche post sopra
Quanti thread crei ?
Potrebbe trattarsi di memoria locale al thread non liberata...
me lo hanno segnalato ed ho postato anche un documento qualche post sopra
Dando una letta veloce mi è parso di vedere solo questo:
Un thread pu`o terminare un altro thread con la funzione:
BOOL TerminateThread(
HANDLE hThread,
DWORD dwExitCode);
ma questa tecnica `e fortemente scoraggiata (non vengono liberate
le risorse del thread, non vengono eseguiti i “completion
handler”...).
e questo:
i pthread permettono di “terminare” in maniera pulita un
altro thread (con la primitiva pthread cancel) mentre nel
caso di Win32, la terminazione, come detto, non esegue tutte
le operazioni di cleanup (ad esempio l’invocazione dei
completion handler).
Qui ulteriori informazioni sulla TerminateThread:
http://msdn.microsoft.com/en-us/library/ms686717%28v=vs.85%29.aspx
Inoltre c'è una nota in grassetto relativamente al resource leak, ma sembra essere rivolta a Windows 2000, xp e 2003 server.
In ogni caso come dice anche lì è sconsigliato usare questa funzione.
Quindi il memory leak semmai ci fosse è causato da una terminazione forzata di un thread dall'esterno.
Se tu crei un thread e gestisci all'interno del thread stesso la terminazione con la ExitThread, non c'è alcun memory leak.
quell'articolo dice anche che se non sei più che sicuri di stare usando API win32 potresti avere dei problemi: sinceramente ho qualche dubbio in quanto ho anche letto che la VCL che usa borland builder non è multithread e forse le sue funzioni non sono thread-safe
Spero siano menate senza senso le mie
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.