【问题标题】:How to assign unique ids to threads in a pthread wrapper?如何为 pthread 包装器中的线程分配唯一 ID?
【发布时间】:2014-07-22 09:28:06
【问题描述】:

假设我正在编写一个 pthread 包装器。我尝试在线程创建阶段为线程分配唯一的 id,以便我可以确定执行。如何让每个线程知道他的唯一 ID?

【问题讨论】:

  • 为什么不用pthread_self和pthread_getthreadid_np?
  • @Lazin - 它们不是唯一的;它们可以重复使用。请参阅 pthread_self(3) 手册页。

标签: multithreading pthreads


【解决方案1】:

您不能强制系统使用您选择的 id。

根据@Lazin 的评论:pthread_self() 会告诉 pthread 系统给它的 id。

如果您想分配自己的 id(例如一些小整数),那么显然您可以这样做并将它与使用 pthread_create()void* arg 参数(最后一个参数)传递的任何其他参数一起传递到 pthread。

【讨论】:

  • 我正在做一个确定性多线程项目。简而言之,我想使用一个令牌来确保任何时候只有一个线程在执行。所以我希望一个线程在他到达临界区时检查他是否持有令牌(token_id == myid)。也就是说,我应该在生成它们时为每个线程分配一个唯一的 id(在 thread_creation 包装器中)。
  • 好的。嗯,创建线程时返回的thread-id和pthread_self()返回给线程的thread-id是一样的,可以比较thread-ids是否相等(pthread_equal()),它们是唯一的...所以您可以像使用token_id 一样使用pthread_t 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多