Chinaunix首页 | 论坛 | 博客
  • 博客访问: 426805
  • 博文数量: 103
  • 博客积分: 5010
  • 博客等级: 大校
  • 技术积分: 971
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-11 17:22
文章分类
文章存档

2008年(77)

2007年(26)

我的朋友

分类: LINUX

2008-04-30 21:32:11

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

阅读(1871) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~