fork和pthread_create将返回一个进程ID或线程ID。
但是我不知道这些ID的数值范围。
现在我想创build一个查询表,在每个条目中都有一个用于线程ID的项目/字段。 每个条目的结构是这样的:
typedef struct { int seq; pthread_t tID; ... } entry_t;
当我没有得到一个线程的tID时,我想给一个无效的tID分配一个值(很快这个字段将被填充一个有效的字符,但在此之前, fill函数将检查该pID是有效的还是不)。 那么,线程和进程ID的取值范围是什么?
双向消息在OS内的两个进程之间传递
我怎样才能平行这个字计数function?
如何设置优先级来获取C / C ++中的互斥量
使用超线程运行模拟运行时
在C中同步进程和信号量和信号
Python多处理只使用一个核心
Python多处理:我怎样才能可靠地从一个subprocessredirect标准输出?
如何使用subprocess停止由单个脚本产生的所有subprocess
在进程之间进行通信时,队列对pipe道有什么优势?
如何在Python中为单个函数执行多处理?
pthread_t类型是完全不透明的。 您只能将其与pthread_equal函数进行比较,并且没有任何有效线程标识的保留值,尽管这样的值可能会添加到POSIX标准的下一个版本中。 因此,您需要在线程ID旁边存储第二个字段来跟踪是否有效。
pID的最大值是可以改变的,默认是32768,这是short int的最大值的大小,并且可以与早期版本的UNIX兼容。
您可以在/ proc / sys / kernel / pID_max中查看并更改它。
顺便说一句,
进程ID 0通常是调度程序进程,通常称为交换程序。 磁盘上的程序不对应于这个进程,它是内核的一部分,被称为系统进程。 进程ID 1通常是init进程,在引导过程结束时由内核调用。 这个进程的程序文件是在旧版本的UNIX系统中的/ etc / init,而在新版本中是/ sbin / init。 内核启动后,这个过程负责启动一个UNIX系统。 –APUE
tID仅在其所属过程的范围内才有意义。 在UNIX的不同famly中,pthread_t不是相同的类型,比如
linux 2.4.22使用pthread_t数据类型的无符号长整数。 Solaris 9将pthread_t数据类型表示为无符号整数。 FreeBSD 5.2.1和Mac OS X 10.3使用指向pthread_t数据类型的pthread结构的指针。 –APUE
所以你不能简单地告诉它的范围。
但threads_max最多显示一个进程中有多少个线程,可以在/ proc / sys / kernel / threads-max中看到并更改它。
正如其他人所指出的,没有定义值表示无效的pthread-ID。
解决这个问题的一种方法可能是修改描述线程的结构,如下所示:
typedef struct { int seq; pthread_t pthread; int pthread_is_valID; /* set this to 0 on initialisation of the structure and change it be 1 if pthread_create() was successfull. */ ... } entry_t;
另外,我建议不要调用pthread_create()的第一个参数tID设置的值,因为这会导致名称含糊不清,被gettID() ,在linux下它实际上是一个进程ID。
由于无效的进程ID -1应该做的。
我的意见为什么你不能跟踪无效的线程ID通过分配定义的错误值tID本身。 在查找表时,如果在表增长时保持添加更多成员来结构,则大小可能会受到限制。
/ *线程标识符* / typedef unsigned long int pthread_t;
在检查pthread_create结果时,可能会分配您自己定义的错误值。
例如:pthread_create失败 – 将say -ve值分配给tID。 所以虽然查找,你可以验证检查自己的#define -ve值。
总结以上是内存溢出为你收集整理的线程和进程ID的值范围是多less?全部内容,希望文章能够帮你解决线程和进程ID的值范围是多less?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)