对线程的一点理解

  线程的创建即意味着该线程会去执行其特定的任务,当然线程在创建过程中可能会失败,若程序代码没有码错,一般会出现两种错误,一:出现EAGIN即系统限制创建线程,可能原因:线程过多,二:出现EINVAL即创建函数中使用了非法的线程属性,若无特殊要求,线程属性一般为NULL ,此处附上函数原型:extern int pthread_create_p((pthread_t *_thread,_const pthread_attr_t* _attr,void *(*_start_routine)(void *),void *_arg));第一个参数为线程标识符指针,第二个参数为当前线程属性,第三个即线程起始地址,第四个参数为 运行函数参数

    当然是在线程创建成功的线程函数中文章,但是线程一旦被创建就会去争抢系统资源,理论上创建的一号线程会优于其他线程,在未加任何限制的情况下,实际情况是未知的,所以线程一般和信号量连用,此时便会涉及到信号量的创建和对信号量函数的操作,此处不做说明,然而在实际操作中会发现,线程在运行的同时,主函数也会继续运行,若未加任何操作,线程作业可能在未完成时夭折,主函数先于线程结束,此时便会涉及到第二个线程函数extern int pthread_join __P ((pthread_t __th, void **__thread_return));第一个参数为所等待的线程标识符,第二个参数为用户自定义指针用来装载线程返回状态值,当然也可置为NULL,此函数为线程阻塞函数,会等待指定线程结束后返回,这里有涉及到线程结束的情况分析,一为线程完成运行函数后返回,二使用第三个线程函数extern void pthread_exit __P ((void *__retval)) __attribute__ ((__noreturn__));此函数唯一的参数为返回值的函数代码,只要pthread_join中的第二个参数thread_return不是NULL,这个值将被传递给 thread_return。最后要说明的是,一个线程不能被多个线程等待,否则第一个接收到信号的线程成功返回,其余调用pthread_join的线程则返回错误代码ESRCH。


                                                                                                                                                          


你可能感兴趣的:(对线程的一点理解)