1 { 2 pthread_attr_t attr;//线程属性 3 int rc = -1, err_sav; 4 5 if (!pThreadId) { 6 errno = EINVAL; 7 return -1; 8 } 9 10 memset(&attr, 0, sizeof(attr)); 11 if (0 != (errno = pthread_attr_init(&attr))) {//线程属性初始化 12 return -1; 13 } 14 15 if (0 != (errno = pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM))) {//此线程将与系统中的所有线程进行竞争 16 goto err; 17 } 18 19 if (0 != (errno = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))) {//线程自己自动释放所有资源 20 goto err; 21 } 22 23 if (0 != (errno = pthread_attr_setstacksize(&attr, stack_sz))){//限制线程堆栈大小,以字节为单位 24 goto err; 25 } 26 27 if (0 != (errno = pthread_create(pThreadId, &attr, entry, thd_par))) {//创建线程,pid、属性、线程函数 28 goto err; 29 } 30 31 rc = 0; 32 33 err: 34 err_sav = errno; 35 if (0 != (errno = pthread_attr_destroy(&attr))) {//销毁线程属性 36 rc = -1; 37 } 38 errno = err_sav; 39 40 return rc; 41 }