首页 > 解决方案 > 我可以连续重用 pthread_t 和 pthread_attr_t 用于已执行线程的新不同线程吗?

问题描述

我想在不使用 pthread_join 的情况下连续执行 2 个不同的线程,可以吗?还是我真的必须像这样声明新的thread_t:

pthread_create(&th,&thread_attr,shtdwn,(void*)&lpBuffer);
pthread_create(&th,&thread_attr,Run,(void*)&args);

而且我不需要等待任何一个线程完成。非常感谢您的帮助,谢谢!

标签: cmultithreadingpthreads

解决方案


pthread_t和变量都pthread_attr_t可以在每次pthread_create调用中重复使用。事实上,pthread_attr_t像这样重复使用的情况很常见。但是,重用pthread_t变量有点不寻常,因为该值通常被存储以用于pthread线程上的后续操作(例如pthread_join)。

此外,pthread_attr_t可以为 NULL,在这种情况下将使用默认属性。但是,pthread_t参数不能为 NULL。从pthread_create 手册

attr 参数指向一个 pthread_attr_t 结构,其内容在线程创建时用于确定新线程的属性;这个结构是使用 pthread_attr_init(3) 和相关函数初始化的。如果 attr 为 NULL,则使用默认属性创建线程。

在返回之前,成功调用 pthread_create() 会将新线程的 ID 存储在 thread 指向的缓冲区中;


推荐阅读