【发布时间】:2012-04-22 18:56:15
【问题描述】:
是否可以确定我声明的 pthread_t 结构是否未使用?我有一个 pthread_t 结构数组,在我的程序结束时,我在每个结构上调用 pthread_join(),但如果其中一些从未使用过,我不想在它们上调用 pthread_join()。判断 pthread_t 结构是否未使用的最佳方法是什么?
【问题讨论】:
是否可以确定我声明的 pthread_t 结构是否未使用?我有一个 pthread_t 结构数组,在我的程序结束时,我在每个结构上调用 pthread_join(),但如果其中一些从未使用过,我不想在它们上调用 pthread_join()。判断 pthread_t 结构是否未使用的最佳方法是什么?
【问题讨论】:
传递给pthread_join() 的pthread_t 对象必须引用一个可连接的线程。所以你需要自己跟踪 - 在 pthread_t 对象旁边保留一个标志以跟踪它是否被使用(也许将标志与 pthread_t 一起打包在一个结构中)。
请记住,除了尚未使用 pthread_t 对象之外,如果您从线程分离或加入线程,您还需要清除标志(我不确定这是否是一个详尽的列表pthread_t 对象何时变为“不可加入”...)。
【讨论】:
pthread_t 不一定是结构体!这是一个不透明的类型,你知道的可能是some_type * 或unsigned int。只有最近的 POSIX 更正 (2004) 删除了 pthread_t 是算术类型的要求,允许它是一个结构。