【发布时间】:2016-01-12 13:09:06
【问题描述】:
我们有一个类有一个受保护的 pthread_t 变量。一旦构建了该类,pthread_t 就存在了,但它没有分配给它的 ID,这正是 pthread_create 所做的。
在这种情况下可以在 pthread_t 变量上调用 pthread_join 吗?
如果我正确理解 pthread_join 的手册页,它应该会返回 ESRCH 错误,但此手册页的解释可能不同。
【问题讨论】:
-
你怎么知道你的
pthread_t变量不包含已经创建的线程的ID,从而导致调用者等待错误的线程? -
好点。不知何故,我假设将创建 pthread_t 并将 ID 初始化为 0 / 不可能的 ID。是否可以查看pthread_t并检查ID是否已设置?
-
是否可以查看 pthread_t 并检查 ID 是否已设置? 您可以使用调试器或发出带有 ID 值的某种类型的日志消息.如何初始化值?
-
我不知道它是如何初始化的。 Pthread_create 根据手册页设置该 ID。我只是想避免携带“已初始化”标志。如果我可以在尚未与 pthread_create 一起使用的 pthread_t 上调用 pthread_join,那就太好了。如果我能以某种方式查看 pthread_t 对象并检查自己是否已“创建”它,那也很好。
-
您的
pthread_t值必须以某个值开头 - 它要么是不确定的,要么已初始化为特定值。
标签: pthreads posix pthread-join