12.2 线程限制
我们已经在2.5.4节中讨论了函数sysconf,The Single Unix Specification定义了与线程操作相关的几个限制。与其他系统限制一样,线程限制也可以使用函数sysconf进行查询,图12.1总结了这些限制.
与其他使用sysconf获取到的系统限制一样,这些限制的应用是为了促进应用程序在不同操作系统实现上的可移植性,比如说,如果你的应用程序需要你为你所管理的每个文件创建4个线程,如果系统并不能让你创建无限多的线程,那么你就需要限制你能够同时管理的文件数量。
限制名称 | 描述 | 名称参数 |
---|---|---|
PTHREAD_DESTRUCTOR_ITERATIONS | 在线程退出时实现尝试释放线程私有数据的最大尝试次数(12.6节) | _SC_THREAD_DESTRUCTOR_ITERATIONS |
PTHREAD_KEYS_MAX | maximum number of keys that can be created by a process(12.6节) | _SC_THREAD_KEYS_MAX |
PTHREAD_STACK_MIN | minimum number of bytes that can be used for a thread’s stack(12.3节)_SC_THREAD_STACK_MIN | |
PTHREAD_THREADS_MAX | maximum number of threads that can be created in a process(12.3节) | _SC_THREAD_THREADS_MAX |
图12.1 线程限制以及sysconf使用的名称参数
图12.2显示了本书描述的四个平台上的线程限制。如果实现的限制并不明确,列表中采用”no list”进行标注,然而,这并不意味该数值是无限的。
注意虽然实现可能并没有提供对这些资源限制的访问,但是并不表示限制不存在,这只是说明实现没有提供使用sysconf函数获取线程资源限制的方法。
限制 | FreeBSD 8.0 | Linux 3.2.0 | Mac OS X 10.6.8 | Solaris 10 |
---|---|---|---|---|
PTHREAD_DESTRUCTOR_ITERATIONS | 4 | 4 | 4 | no limit |
PTHREAD_KEYS_MAX | 256 | 1024 | 512 | no limit |
PTHREAD_STACK_MIN | 2048 | 16384 | 8192 | 8192 |
PTHREAD_THREADS_MAX | no limit | no limit | no limit | no limit |