重新学习线程笔记分享
创建线程函数
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, ¶m1);
线程的终止函数
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方式,否则显示结果出问题
- 分享
- 举报
-
浏览量:3084次2020-08-18 11:46:20
-
浏览量:2414次2020-07-31 18:12:31
-
浏览量:9983次2020-12-06 23:28:09
-
浏览量:1926次2020-08-28 16:40:19
-
浏览量:610次2023-06-02 17:41:00
-
浏览量:816次2023-04-14 14:42:21
-
浏览量:4180次2020-10-28 23:08:53
-
浏览量:6482次2020-10-28 23:03:59
-
浏览量:2303次2020-04-17 11:47:15
-
浏览量:559次2023-06-03 15:58:59
-
浏览量:533次2023-07-05 10:16:37
-
浏览量:766次2023-06-03 16:05:52
-
浏览量:1733次2019-12-05 16:34:01
-
浏览量:451次2023-06-03 15:58:33
-
浏览量:483次2023-07-24 15:23:06
-
浏览量:568次2023-06-02 17:42:13
-
浏览量:783次2023-07-05 10:17:15
-
浏览量:785次2024-02-22 15:39:36
-
浏览量:1693次2020-08-07 17:02:17
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
在学了在学了!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明