pthread_detach将为我管理我的内存吗?
时间:2020-03-06 14:44:37 来源:igfitidea点击:
假设我有以下代码:
while(TRUE) { pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t)); pthread_create(thread, NULL, someFunction, someArgument); pthread_detach(*thread); sleep(10); }
分离的线程将释放由malloc分配的内存,还是我现在要做的事情?
解决方案
不可以。pthread_create()无法知道传递给它的线程指针是动态分配的。 pthreads不在内部使用此值;它只是将新的线程ID返回给调用方。我们无需动态分配该值。我们可以改为传递局部变量的地址:
pthread_t thread; pthread_create(&thread, NULL, someFunction, someArgument);
我们需要自己释放内存。最好将pthread_t变量简单地分配到堆栈而不是堆上。