amiga
13-11-2003, 12:28
hi :)
habe mal eine Frage bezüglich malloc()/free() bzw. new/delete in Verbindung mit pthreads :
In Programmen, die pthreads verwenden, kommt es bei mir manchmal zufälligen Abstürzen (Segmentation Faults), wenn man malloc() aufruft.
malloc() scheint da nicht thread-sicher zu sein.
Habe es jetzt mit pthread_mutex_lock() und pthread_mutex_unlock() gekapselt, das sieht etwa so aus (codeschnipsel) :
#include <pthread.h>
...
pthread_mutex_t g_mtxMemory;
void *thread_malloc(size_t s)
{
void *x;
pthread_mutex_lock(&g_mtxMemory);
x = malloc(s);
pthread_mutex_unlock(&g_mtxMemory);
}
void thread_free(void *x)
{
pthread_mutex_lock(&g_mtxMemory);
free(x);
pthread_mutex_unlock(&g_mtxMemory);
}
int main()
{
pthread_mutex_init(&g_mtxMemory,NULL);
// ... code ...
pthread_mutex_destroy(&g_mtxMemory);
return 0;
}
Meine Frage ist nun : ist das eine sinnvolle Lösung ? Gibts da evtl noch eine andere Möglichkeit um malloc thread-safe zu bekommen ?
Was mich auch mal interessieren würde : Wie verhalten sich "new" und "delete" in C++ ? Kann man die Funktionen als threadsafe ansehen ?
Gruß, amiga
habe mal eine Frage bezüglich malloc()/free() bzw. new/delete in Verbindung mit pthreads :
In Programmen, die pthreads verwenden, kommt es bei mir manchmal zufälligen Abstürzen (Segmentation Faults), wenn man malloc() aufruft.
malloc() scheint da nicht thread-sicher zu sein.
Habe es jetzt mit pthread_mutex_lock() und pthread_mutex_unlock() gekapselt, das sieht etwa so aus (codeschnipsel) :
#include <pthread.h>
...
pthread_mutex_t g_mtxMemory;
void *thread_malloc(size_t s)
{
void *x;
pthread_mutex_lock(&g_mtxMemory);
x = malloc(s);
pthread_mutex_unlock(&g_mtxMemory);
}
void thread_free(void *x)
{
pthread_mutex_lock(&g_mtxMemory);
free(x);
pthread_mutex_unlock(&g_mtxMemory);
}
int main()
{
pthread_mutex_init(&g_mtxMemory,NULL);
// ... code ...
pthread_mutex_destroy(&g_mtxMemory);
return 0;
}
Meine Frage ist nun : ist das eine sinnvolle Lösung ? Gibts da evtl noch eine andere Möglichkeit um malloc thread-safe zu bekommen ?
Was mich auch mal interessieren würde : Wie verhalten sich "new" und "delete" in C++ ? Kann man die Funktionen als threadsafe ansehen ?
Gruß, amiga