使用sysconf( )
了解系统的线程资源限制是使得应用程序恰当地管理它们的关键。前面已经讨论了利用系统资源的示例。当设置线程的栈大小时,最小值为PTHREAD_MIN_STACK。栈大小不应当低于由pthread_attr_getstacksize( )返回的默认栈大小的最小值。每个进程的最大线程数决定了能够为每个进程创建的worker线程的上限。函数sysconf( )用于返回可配置系统限制或选项的当前值。系统中定义了同线程、进程和信号量相关的多个变量和常量。在表6-8中,列出了部分变量和常量。
表6-8
变
量
名字值(Name Value)
描
述
_SC_THREADS
_POSIX_THREADS
支持线程
_SC_THREAD_ATTR_
STACKADDR
_POSIX_THREAD_ATTR_
STACKADDR
支持线程栈地址属性
_SC_THREAD_ATTR_
STACKSIZE
_POSIX_THREAD_ATTR_
STACKSIZE
支持线程栈大小属性
_SC_THREAD_STACK_MIN
PTHREAD_STACK_MIN
线程栈存储区的
最小大小,以字节为单位
(续表)
变
量
名字值(Name Value)
描
述
_SC_THREAD_THREADS_MAX
PTHREAD_THREADS_MAX
每个进程的
最大线程数
_SC_THREAD_KEYS_MAX
PTHREAD_KEYS_MAX
每个进程关键
字的最大数目
_SC_THREAD_PRIO_INHERIT
_POSIX_THREAD_PRIO_
INHERIT
支持优先
级继承选项
_SC_THREAD_PRIO
_POSIX_THREAD_PRIO_
支持线程
优先级选项
_SC_THREAD_PRIORITY_
SCHEDULING
_POSIX_THREAD_PRIORITY_
SCHEDULING
支持线程优
先级调度选项
_SC_THREAD_PROCESS_
SHARED
_POSIX_THREAD_PROCESS_
SHARED
支持进程共享同步
_SC_THREAD_SAFE_
FUNCTIONS
_POSIX_THREAD_SAFE_
FUNCTIONS
支持线程安全函数
_SC_THREAD_DESTRUCTOR_
ITERATIONS
_PTHREAD_THREAD_
DESTRUCTOR_ITERATIONS
决定在线程退
出时尝试销毁
线程特定数据
的尝试次数
_SC_CHILD_MAX
CHILD_MAX
每个UID允许
的最大进程数目
_SC_PRIORITY_SCHEDULING
_POSIX_PRIORITY_
SCHEDULING
支持进程调度
_SC_REALTIME_SIGNALS
_POSIX_
REALTIME_SIGNALS
支持实时信号
_SC_XOPEN_REALTIME_
THREADS
_XOPEN_
REALTIME_THREADS
支持X/Open
POSIX实时
线程特性组
_SC_STREAM_MAX
STREAM_MAX
决定进程能够
打开的流的数目
_SC_SEMAPHORES
_POSIX_SEMAPHORES
支持信号量
_SC_SEM_NSEMS_MAX
SEM_NSEMS_MAX
决定线程能
够拥有的信号
量的最大数目
_SC_SEM_VALUE_MAX
SEM_VALUE_MAX
决定信号量的最大值
_SC_SHARED_MEMORY_
OBJECTS
_POSIX_SHARED_MEMORY_
OBJECTS
支持共享内存对象
下面是调用sysconf( )的示例:
if(PTHREAD_STACK_MIN == (sysconf(_SC_THREAD_STACK_MIN))){ //... }
代码中将sysconf( )返回的_SC_THREAD_STACK_MIN的值同PTHREAD_STACK_MIN这个常量值进行了比较。