一.函數:
1.線程屬性的初始化與銷毀:
#include <pthread.h>
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy(pthread_attr_t *attr);
Both return: 0 if OK, error number on failure
2.設定線程屬性--detackstate(分離狀態):
#include <pthread.h>
int pthread_attr_getdetachstate(const pthread_attr_t *restrict attr, int *detachstate);
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
Both return: 0 if OK, error number on failure
detachstate有兩個選項:PTHREAD_CREATE_DETACHED 分離狀態啟動線程
PTHREAD_CREATE_JOINABLE 正常狀態啟動線程
3.設定線程屬性--stackaddr(線程棧的最低地址),stacksize(線程棧的大小):
#include <pthread.h>
int pthread_attr_getstack(const pthread_attr_t *restrict attr,
void **restrict stackaddr,
size_t *restrict stacksize);
int pthread_attr_setstack(const pthread_attr_t *attr,
void *stackaddr,
size_t *stacksize);
Both return: 0 if OK, error number on failure
4.設定線程屬性--stacksize(線程棧的大小):
#include <pthread.h>
int pthread_attr_getstacksize(const pthread_attr_t *restrict attr,
size_t *restrict stacksize);
int pthread_attr_setstacksize(pthread_attr_t *attr,
size_t stacksize);
Both return: 0 if OK, error number on failure
5.設定線程屬性--guardsize(線程棧末尾的警戒緩衝區大小)
#include <pthread.h>
int pthread_attr_getguardsize(const pthread_attr_t *restrict attr,
size_t *restrict guardsize);
int pthread_attr_setguardsize(pthread_attr_t *attr,
size_t guardsize);
Both return: 0 if OK, error number on failure
二.重點:
三.例子:
以分離狀態建立線程
[cpp]
view plaincopyprint?
- #include <stdio.h>
- #include <pthread.h>
- #include <string.h>
-
- void * thr_fn()
- {
- printf("thread run\n");
- pthread_exit((void *)0);
- }
-
- int main()
- {
- pthread_t tid;
- pthread_attr_t attr;
- int ret;
-
- ret = pthread_attr_init(&attr);
- if(ret!=0)
- printf("init attr error:%s\n",strerror(ret));
- ret = pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
- if(ret==0)
- {
- ret = pthread_create(&tid,&attr,thr_fn,NULL);
- if(ret!=0)
- printf("create thread error:%s\n",strerror(ret));
- }
- pthread_attr_destroy(&attr);
- sleep(1);
- return 0;
- }
#include <stdio.h><br />#include <pthread.h><br />#include <string.h></p><p>void * thr_fn()<br />{<br /> printf("thread run\n");<br /> pthread_exit((void *)0);<br />}</p><p>int main()<br />{<br /> pthread_t tid;<br /> pthread_attr_t attr;<br /> int ret;</p><p> ret = pthread_attr_init(&attr);<br /> if(ret!=0)<br /> printf("init attr error:%s\n",strerror(ret));<br /> ret = pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);<br /> if(ret==0)<br /> {<br /> ret = pthread_create(&tid,&attr,thr_fn,NULL);<br /> if(ret!=0)<br /> printf("create thread error:%s\n",strerror(ret));<br /> }<br /> pthread_attr_destroy(&attr);<br /> sleep(1);<br /> return 0;<br />}運行:
root@ubuntu1:~/12# ./a.out
thread run
轉自http://blog.csdn.net/wyjlovec/article/details/7347128