什么是 mac osx 上 POSIX 的线程 ID

What is thread ID of POSIX on mac osx

本文关键字:线程 ID POSIX mac osx 什么      更新时间:2023-10-16

我刚刚阅读了IEEE Std 1003.1,2004™版(POSIX规范(,以确保Mac osx上的实际线程ID是什么。在POSIX SPEC的pthread_equal((的基本原理部分中说:

实现可以选择将线程 ID 定义为结构。例如,线程 ID 可以包含一个序列号,允许检测已检测到的线程 ID 的"悬空 ID"副本。由于 C 语言不支持结构类型比较,因此提供了 pthread_equal(( 函数来比较线程 ID。

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

我的第一个问题是:

  1. pthread_t用于标识线程。 它是指向 OSX 中键入"_opaque_pthread_t"的指针。那么,说 _opaque_pthread_t 类型的地址代表线程 ID 是否正确?
  2. 它的成员叫什么__sig、__cleanup_stack和__opaque?我认为作为应用程序开发人员是什么并不重要吗?

为了找到我问题的答案,我用谷歌搜索,然后我找到了这个问题:Mac/iPhone:有没有办法在不使用Objective-C的情况下获得线程标识符? 但它提出了另一个问题。

另一个问题是:

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

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