【发布时间】:2013-05-17 00:12:43
【问题描述】:
fork 和 pthread_create 将返回进程 ID 或线程 ID。
但是我不知道这些id的取值范围。
现在我想制作一个查找表,在每个条目中都有一个用于线程 ID 的项目/字段。 每个条目的结构如下:
typedef struct {
int seq;
pthread_t tid;
...
} entry_t;
当我没有得到线程的 tid 时,我想为一个无效的 tid 分配一个值(很快这个字段将被一个有效的填充,但在此之前fill 函数将检查pid是否有效)。那么,线程和进程id的取值范围是多少?
【问题讨论】:
-
pthread_create()返回 0 或错误号;它设置了通过指针传递给它的pthread_t结构,但是pthread_t类型没有记录的结构。fork()返回的 PID 是int主题的变体;它们是 32 位数字,尽管很少使用所有 32 位(但使用了超过 16 位)。 Linux有一个gettid()函数返回一个线程ID;返回类型为pid_t,与fork()和getpid()相同。它不是标准功能(根据我正在查看的文档,它是在内核 2.4.11 中添加的)。 -
有没有可能
tid= 0? -
@misteryes:请注意
gettid()(tid)返回的值与pthread_create()成功调用写入第一个参数的值无关。
标签: c linux multithreading multiprocessing