pthread_create函数
名称
pthread_create -- 创建一个新线程
概要
#include <pthread.h>
int
pthread_create(pthread_t *thread,
const pthread_attr_t *attr,
void *(*start_routine)(void *),
void *arg);
描述
pthread_create()函数用来在进程内创建一个新线程,它的属性是由attr指定的。
若attr为NULL,则使用默认的属性。若由atrr指定的属性在之后发生改变,线程的属性不受影响。
一旦成功创建线程,pthread_create()函数将把创建好的线程的ID储存在由参数thread指定的位置。
创建线程的同时,会执行start_routine函数,该函数有个唯一的参数,arg。
若函数start_routine返回了,效果就如同,隐式调用了pthread_exit()函数,它使用start_routine函数的返回值作为退出状态。
注意,最初调用main()函数的主线程不同于此。当主线程从main()函数里返回时,
效果如同隐式调用exit()函数,该函数使用main()函数的返回值作为退出状态。
线程一退出,它所占用的存储空间必须被回收——回收是通过另一个线程调用pthread_join()函数来完成的;
或者,可通过在线程上调用pthread_detach()来表明——一旦线程退出,系统将自动回收线程的存储空间。
为了获得与在新创建的线程上调用pthread_detach()函数相同的效果,
也可以在传入pthread_create()函数的attr参数上调用pthread_attr_setdetachstate()函数。
新线程的信号状态被初始化为:
1. 信号掩码继承自新建线程。
2. 等候新线程的信号集是空的。
返回值
若成功执行,pthread_create()函数将返回零。否则,将返回一个表示错误的错误码。
错误
pthread_create()函数在以下情形下会失败:
[EAGAIN] 系统缺乏足够的资源来创建另一个线程,或者超过了系统设定的一个进程可容纳的线程总数[PTHREAD_THREADS_MAX]的限制。
[EPERM] 函数调用者没有合适的权限来设置所需的调度参数或调度策略。
[EINVAL] 由attr所指定的值是无效的。
另请参阅
fork(2), pthread_attr(3), pthread_cancel(3), pthread_cleanup_pop(3),
pthread_cleanup_push(3), pthread_exit(3), pthread_join(3)
标准
pthread_create()函数符合 ISO/IEC 9945-1:1996 (``POSIX.1'')这一标准。