提问人:jbleners 提问时间:9/26/2008 更新时间:9/26/2008 访问量:1849
pthread_detach会为我管理我的记忆吗?
Will pthread_detach manage my memory for me?
问:
假设我有以下代码:
while(TRUE) {
pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t));
pthread_create(thread, NULL, someFunction, someArgument);
pthread_detach(*thread);
sleep(10);
}
分离的线程会释放 malloc 分配的内存,还是我现在必须做的事情?
答:
10赞
Commodore Jaeger
9/26/2008
#1
不。pthread_create() 无法知道传递给它的线程指针是动态分配的。pthreads 在内部不使用此值;它只是将新的线程 ID 返回给调用方。您不需要动态分配该值;您可以改为传递局部变量的地址:
pthread_t thread;
pthread_create(&thread, NULL, someFunction, someArgument);
1赞
An̲̳̳drew
9/26/2008
#2
您需要自己释放内存。最好只是在堆栈上分配 pthread_t 变量,而不是在堆上分配。
评论
0赞
R.. GitHub STOP HELPING ICE
5/21/2011
OP 的问题在于认为,因为接受一个参数,所以你需要一个指针变量来传递。这是 C 程序员初学者的一个典型错误 - 声明指针变量用作参数而不是传递 .pthread_create
pthread_t
&foo
上一个:C/C++ 的多线程内存分配器
下一个:是什么导致了堆栈溢出?
评论