C语言 在循环中调用 pthread_cancel() 显示增加 MEM 使用率



我正在用我的测试代码用 C 语言测试pthread_cancel()功能。这不是我正在使用的确切代码,而是用于解释的简化形式。

int main(argc, char *argvp[])
{
while(1) {
start_thread();
sleep(5);
end_thread();
}
}
void my_thread(void *arg) 
{
printf("in my threadn");
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
return 0;
}
void start_thread()
{
pthread_create(&my_id, NULL, &my_thread, NULL);
}
void end_thread()
{
pthread_cancel(my_id);
}

如果我在我的机器上ps aux,我会看到对于我的上述过程,RSS部分总是在增加。但是如果我用pthread_join()替换pthread_cancel(),我的进程的RSS不会增加。

我没有在我的线程中分配任何资源,所以看起来pthread_cancel()没有在幕后清理一些与 pthread 相关的东西?

我知道pthread_cancel()正在杀死线程,因为我的线程数稳定在 2(与顶部检查......主进程 + my_thread(。

我查看了pthread_cleanup_pop/推送功能,但它们看起来像是用于清理用户分配的内存。

我需要每次使用它们pthread_cancel()吗?

编辑:RSS每次循环增加4kBytes的数量。

在 pthread_cancel(( 之后调用 pthread_detach(( 将释放 pthread "本身持有/使用的资源。

当然,用户必须自己确保他/她在现在取消的线程中分配的资源也被释放。

最新更新