重新学习线程笔记分享

创建线程函数 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方式,否则显示结果出问题

免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:重新学习线程笔记分享 https://www.yhzz.com.cn/a/15167.html

上一篇 2023-05-12 15:24:41
下一篇 2023-05-12 15:32:40

相关推荐

联系云恒

在线留言: 我要留言
客服热线:400-600-0310
工作时间:周一至周六,08:30-17:30,节假日休息。