本文介绍了为什么以及在什么意义上 pthread_t 是不透明类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

SO 上的帖子表明 pthread_t 是一种不透明类型,不是数字,当然也不是线程索引,您不应该直接比较 pthread_t,等等等等

Posts here on SO suggest that pthread_t is an opaque type, not a number, certainly not a thread index, that you shouldn't directly compare pthread_t's, etc. etc.

问题:

  1. 为什么?是否真的打算支持没有线程数字 ID 的系统?当 pthread_t 实现只是

typedef unsigned long int pthread_t;

?

怎么样?上面一行之前有一个注释,所以它实际上是

How? There's a comment before the above line, so it's actually

/* Thread identifiers. The structure of the attribute type is not
   exposed on purpose.  */
typedef unsigned long int pthread_t;

pthreadtypes.h 中是什么意思?什么属性类型?这不是某个全局线程表的索引吗?

in pthreadtypes.h what does that mean? What attribute type? Isn't this an index into some global table of threads?

推荐答案

有不同的类型可以用作数字线程标识符.例如,在资源有限的系统上,可以使用 8 位线程标识符代替 unsigned long.

There are different types that could serve as numeric thread identifier. For example, on systems with limited resources an 8-bit thread identifier could be used instead of unsigned long.

属性类型的结构不是故意暴露的.

注释不是针对pthread_t定义,而是针对pthread_attr_t定义下面一行:

The comment is not for pthread_t definition, but for the pthread_attr_t definition one line below:

typedef union
{
  char __size[__SIZEOF_PTHREAD_ATTR_T];
  long int __align;
} pthread_attr_t;

注释指出 char __size[__SIZEOF_PTHREAD_ATTR_T] 用于隐藏实际 struct 的内容.

The comment states that char __size[__SIZEOF_PTHREAD_ATTR_T] is used in order to hide the content of the actual struct.

[pthread_t] 不是某个全局线程表的索引吗?

不必如此.隐藏实际类型的事实允许实现者使用他希望的任何类型,包括指针或 struct.使用 struct 可以让实现者避免在他的库代码中使用全局线程表(不过,操作系统可能会保留这样的表).

It does not have to be. The fact that the actual type is hidden allows an implementer to use any type that he wishes, including a pointer or a struct. Using a struct lets the implementer avoid using a global table of threads in the code of his library (OS would probably keep such table, though).

这篇关于为什么以及在什么意义上 pthread_t 是不透明类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-03 04:55