什么是mac osx上POSIX的线程ID

时间:2013-10-08 12:05:22

标签: c++ macos

我刚读过IEEE Std 1003.1™,2004 Edition(POSIX规范),以确定mac osx上的实际线程ID是什么。在POSIX SPEC的pthread_equal()的RATIONALE部分中说:

  

实现可以选择将线程ID定义为结构。这允许使用int的额外灵活性和健壮性。例如,线程ID可以包括允许检测已经检测到的线程ID的“悬空ID”副本的序列号。由于C语言不支持结构类型的比较,因此提供了pthread_equal()函数来比较线程ID。

在Mac OSX中,pthread_t被定义为指向名为'_opaque_pthread_t'的结构的指针,该结构有3个成员。 __sig是long类型,__ cleanup_stack是指向结构的指针,__opaque是char类型的数组。

我的第一个问题是:

  1. pthread_t用于标识线程。它是一个在osx中​​输入'_opaque_pthread_t'的指针。那么,如果_opaque_pthread_t类型的地址代表线程ID?
  2. ,这是正确的吗?
  3. 它的成员名为__sig,__ cleanup_stack和__opaque?是否可以,我认为它与应用程序开发人员的关系并不重要?
  4. 为了找到我的问题的答案,我用Google搜索,然后我找到了this question:Mac/iPhone: Is there a way to get a thread identifier without using Objective-C?,但它提出了另一个问题。

    另一个问题是:

    1. mach_port_t不是线程ID。它是一个无符号整数类型,表示GNU Mach中的端口名称。它们的含义不同。但是当我想获得一个唯一的线程标识符时。 mach_port_t和pthread_t是否可以随时更换?

1 个答案:

答案 0 :(得分:3)

在OS X上,可以使用pthread.h中定义的pthread_threadid_np。注意_np后缀表明它是POSIX的扩展。