了解系统的线程资源限制是使得应用程序恰当地管理它们的关键。前面已经讨论了利用系统资源的示例。当设置线程的栈大小时,最小值为PTHREAD_MIN_STACK。栈大小不应当低于由pthread_attr_getstacksize( )返回的默认栈大小的最小值。每个进程的最大线程数决定了能够为每个进程创建的worker线程的上限。函数sysconf( )用于返回可配置系统限制或选项的当前值。系统中定义了同线程、进程和信号量相关的多个变量和常量。在表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


线程栈存储区的最小大小,以字节为单位




_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( )的示例:

  1. if(PTHREAD_STACK_MIN == (sysconf(_SC_THREAD_STACK_MIN))){  
  2.    //...  


参考网址:


http://deepfuture.javaeye.com/category/120753?page=4&show_full=true