原文地址:http://deepfuture.iteye.com/blog/754933
使用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这个常量值进行了比较。