Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ mac osx上POSIX的线程ID是多少_C++_Macos - Fatal编程技术网

C++ mac osx上POSIX的线程ID是多少

C++ mac osx上POSIX的线程ID是多少,c++,macos,C++,Macos,我刚刚读了IEEE标准1003.1™, 2004版(POSIX规范),以确保mac osx上的实际线程ID。POSIX规范pthread_equal()的基本原理部分中说: 实现可以选择将线程ID定义为结构。这允许在使用int时具有额外的灵活性和健壮性。例如,线程ID可以包括一个序列号,该序列号允许检测已检测到的线程ID的“悬挂ID”副本)。由于C语言不支持对结构类型进行比较,因此提供了pthread_equal()函数来比较线程ID 在Mac OSX中,pthread_t被定义为指向名为“_o

我刚刚读了IEEE标准1003.1™, 2004版(POSIX规范),以确保mac osx上的实际线程ID。POSIX规范pthread_equal()的基本原理部分中说:

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

在Mac OSX中,pthread_t被定义为指向名为“_opaque_pthread_t”的结构的指针,该结构有3个成员__sig是long类型,_cleanup_stack是指向结构的指针,_不透明是char类型的数组

我的第一个问题是:

  • pthread_t用于标识线程。它是指向osx中类型“\u opaque\u pthread\u t”的指针。那么,说类型为_opaque_pthread_t的地址表示线程ID是否正确
  • 它的成员名为uuu sig、uuu cleanu_stack和uuu opaque是什么?我认为作为应用程序开发人员它是什么并不重要
  • 为了找到我问题的答案,我在谷歌上搜索了一下,然后找到了答案 但它提出了另一个问题

    另一个问题是:

  • mach_port_t不是线程ID。它是一个无符号整数类型,表示GNU mach中的端口名。它们的意思不同。但当我只想得到线程的唯一标识符时。mach_port_t和pthread_t是否始终可交换

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

    您能详细说明一下需要线程ID的目的吗?为什么不继续使用
    pthread\u t
    ?我想获取一个用于日志记录的线程ID。因此,最后,它将作为算术类型传递给printf(或其他什么东西)。对于人类可读的日志来说,它并不理想——理想情况下,您更喜欢1中的线程ID。但是获得这些的唯一方法是以编程方式跟踪线程的创建,这几乎不值得付出努力。我同意你的看法。在这种情况下,我将坚持使用
    pthread\u t
    pthread\u threadid\u np
    。非常感谢。我尝试过使用pthread_threadid_np,并选中了_np后缀表示POSIX线程的不可移植扩展,谢谢!!