1.#ifdef _POSIX_THREAD_PROCESS_SHARED
int pthread_mutexattr_getpshared(pthread_mutexattr_t *attr, int *pshared);
int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);
int pthread_condattr_getpshared(pthread_condattr_t *attr, int *pshared);
int pthread_condattr_setpshared(pthread_condattr_t *attr, int pshared);
#endif
Pthread仅仅为条件变量定义了一个属性,即pshared.
2.线程属性:
#ifdef _POSIX_THREAD_ATTR_STACKSIZE
int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
#endif
#ifdef _POSIX_THREAD_ATTR_STACKATTR
int pthread_attr_getstackaddr(pthread_attr_t *attr, void *stackaddr);
int pthread_attr_setstackaddr(pthread_attr_t *attr, void **stackaddr);
#endif
所有的Pthread都支持detachstate属性,该属性的值可以是PTHREAD_CREATE_JOINABL和PTHREAD_CREATE_DETACHED,默认的情况下,线程被创建为可连接(joinable)的,即意味着由Pthread_create创建的线程ID能够被用来与线程连接并获得它的返回值,或取消它。如果detachstate的属性值设置成PTHREAD_CREATE_DETACHED,使用该属性对象创建的线程ID不能够被使用,当线程终止时,线程使用的任何资源将立刻被系统收回。
想知道一个线程什么时候结束,或者想获得它的返回值,可以使用使用pthread_join函数来实现,但也不必必须使用Pthread_join,如果你提供自己的通知机制,比如使用一个条件变量,当线程
要终止时调用pthread_cond_signal来通知等待线程,这样就不必因为使用pthread_join而必须创建可连接的进程。
设置堆栈大小不是可移植的Pthread定义PTHREAD_STACK_MIN标志,指定每个线程要求的最小栈大小。
设置堆栈地址将降低可移植性,建议最好不要自己设置堆栈地址。
PTHREAD_STACK_MIN实例:
3.主函数调用pthread_exit退出,意味着当最后一个线程退出时,进程将终止。
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv)
{
printf("minimum stack size is %ld bytes\n", sysconf(_SC_THREAD_STACK_MIN));
return 0;
}
执行结果:
[xxxx@localhost chap5]$ ./a.out minimum stack size is 16384 bytes
|
阅读(1917) | 评论(0) | 转发(0) |