系统创建线程的顺序如下:当一个进程启动后,它会自动创建一个线程,即主线程(Main Thread)或者初始化线程(Initial Thread),然后利用pthread_initialize()初始化系统管理线程并且启动线程机制。线程机制启动后需要创建线程,需要phread_create()向管理线程发送REQ_CREATE请求,调用pthread_handle_create()创建新线程。
线程的创建通过函数pthread_create()来完成,该函数的原型如下:
该函数用于创建线程,并为其分配一个唯一的标识符pthread_t。调用者提供一个将由该线程执行的函数,该调用还可以为线程显式指定一些属性。函数各参数的含义如下:
●thread:该参数是一个指向线程标识符的指针,当线程创建成功时,用来返回创建的线程ID。
●attr:该参数用于指定线程的属性,NULL表示使用默认属性。
●start_routine:该参数为一个函数指针,指向线程创建后要调用的函数。这个被线程调用的函数也称为线程函数。
●arg:该参数指向传递给线程函数的参数。
如果创建的thread不需要参数,则最后一个参数设置为空指针。
线程创建成功时,pthread_create()函数返回0。若不为0,则说明创建线程失败。常见的错误代码为EAGAIN和EINVAL。
pthread_create()函数的第2个参数attr是一个指向pthread_attr_t结构体的指针,该结构体指明待创建线程的属性。
在头文件pthread.h中还声明了其他一些有用的系统调用。创建线程的其他系统函数见表10-1。
表10-1 创建线程的其他系统函数(www.xing528.com)
【例10-1】创建线程。
本例使用函数pthread_create()来创建线程。
设计步骤
1)在Vim中创建一个新工程文件,命名为“example10_1.c”。
2)在“example10_1.c”中创建的代码如下所示。
3)用GCC编译运行程序,结果如图10-1所示。
图10-1 创建线程
注意:pthread_create()不是默认库里的函数,编译时需要指定库,加上-lpthread从而引用这个库。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。