深入Pthread(五):线程属性
线程属性相关API
phtread_attr_t attr;
线程属性
POSIX定义的线程属性有:可分离状态(detachstate), 线程栈大小(stacksize),线程栈地址( stackaddr),作用域(scope), 继承调度(inheritsched), 调度策略(schedpolicy)和调度参数( schedparam)。 有些系统并不支持所有这些属性,使用前注意查看系统文档。
例程:
#include <pthread.h> #include "error.h" #include <limits.h> pthread_attr_t attr; void* thread_routine(void* arg) { sleep(1); #ifdef _POSIX_THREAD_ATTR_STACKSIZE size_t stacksize; int status = pthread_attr_getstacksize(&attr, &stacksize); printf("[stacksize:%lu]thread routine is running....\n",stacksize); #endif return NULL; } int main() { pthread_t pid; int status; size_t stacksize; status = pthread_attr_init(&attr); if(status != 0) ERROR_ABORT(status,"Init attr"); status = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if(status != 0) ERROR_ABORT(status, "Set detachstate"); #ifdef _POSIX_THREAD_ATTR_STACKSIZE status = pthread_attr_getstacksize(&attr, &stacksize); if(status != 0) ERROR_ABORT(status, "Get stacksize"); printf("Original thread size:%lu\n", stacksize); status = pthread_attr_setstacksize(&attr, 2*PTHREAD_STACK_MIN); if(status != 0) ERROR_ABORT(status, "Set stacksize"); #endif status = pthread_create(&pid, &attr, thread_routine, NULL); if(status !=0 ) ERROR_ABORT(status, "Create thread"); status = pthread_attr_destroy(&attr); if(status != 0) ERROR_ABORT(status, "Destroy attr"); printf("Main thread is over...\n"); pthread_exit(NULL); }