首页 > 技术知识 > 正文

创建线程函数 int pthread_create(pthread_t* restrict tidp,const pthread_attr_t* restrict_attr,void* (*start_rtn)(void*),void *restrict arg);

tidp:事先创建好的pthread_t类型的参数。成功时tidp指向的内存单元被设置为新创建线程的线程ID。 attr:用于定制各种不同的线程属性。通常直接设为NULL。 start_rtn:新创建线程从此函数开始运行。无参数是arg设为NULL即可。 arg:start_rtn函数的参数。无参数时设为NULL即可。有参数时输入参数的地址。当多于一个参数时应当使用结构体传入。 成功创建返回0,否则返回错误码。

例: void thr_fn(void arg);//线程函数 { Param tmp = (Param )arg;//线程函数的第一句通常是获取传入参数,否则在多线程传输的时候,地址内的值会被下一个线程传入的值覆盖,导致丢失。 / 面对多并发问题,可以在主程序中使用malloc函数单独给一指针开辟地址后指向将使用参数地址,传入指针可解决大多数高并发情况。 / } pthread_t ntid;//用于存储线程ID pthread_create(&ntid, NULL, thr_fn, &param1);

线程的终止函数 void pthread_exit( void * value_ptr );

线程的终止可以是调用了pthread_exit或者该线程的例程代码结束了,也就是说,一个线程可以隐式的退出,也可以显式的调用pthread_exit函数来退出,pthread_exit函数唯一的参数value_ptr是函数的返回代码,只要pthread_join中的第二个参数value_ptr不是NULL,这个值将被传递给value_ptr。

线程资源释放 int pthread_join( pthread_t thread, void * * value_ptr );

函数pthread_join的作用是,等待一个线程终止,调用pthread_join的线程将被挂起直到参数thread所代表的线程终止时为止,pthread_join是一个线程阻塞函数,调用它的函数将一直等到被等待的线程结束为止。如果value_ptr不为NULL,那么线程thread的返回值存储在该指针指向的位置。该返回值可以是由pthread_exit给出的值,或者该线程被取消而返回PTHREAD_CANCELED。

例:char *p; pthread_join(idpthread,(void **)&p);

pthread_detach()

pthread_detach()函数也用于线程释放,它将线程状态改为unjoinable状态,使线程在结束时自动释放资源,该状态也可以在创建线程时设置。 常用用法:在线程函数头加上 pthread_detach(pthread_self()),线程状态改变,在函数尾部直接 pthread_exit线程就会自动退出释放资源。一旦线程处于分离状态,该线程终止时底 层资源立即被回收;否则终止子线程的状态会一直保存(占用系统资源)直到主线程调用

获得线程自身的ID pthread_t pthread_self(void);

pthread_t的类型为unsigned long int,所以在打印的时候要使用%lu方式,否则显示结果出问题

猜你喜欢