线程基本函数简介

一个进程内的所有线程共享同一个全局内存空间,注意同步问题。

一、五个基本线程函数

1.pthread_create函数

#incldue <pthread.h>
int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*func)(void *), void *arg)
(1)类似于fork函数,一个进程内的各个线程由线程ID标识的,数据类型为pthread_t,进程创建成功时,由指针tid返回;
(2)pthread_attr_t指定线程的属性,通常为缺省值NULL;
(3)创建线程时要指定一个线程启动函数,该函数的地址由参数func指定,该函数唯一调用的参数由指针arg指定;
     如果需要给该函数传递多个参数,则将它们打包成一个结构,然后将其地址作为这个唯一的参数;
     通用指针参数(void *)可以使得我们让指针指向任何我们想要指向的东西;
(4)创建成功时返回0,创建失败时返回一个正的Exxx值。

2.pthread_join函数

#include <pthread.h>
int pthread_join(pthread_t tid, void * *status)
(1)类似于waitpid函数,用于等待一个线程的终止(非任意线程),tid为所等待线程的ID;
(2)如果指针status非空,那么所等待线程的返回值(指向一个对象的指针)将存放在status指向的位置;
(3)执行成功时返回0,执行失败时返回一个正的Exxx值。

3.pthread_self函数

#include <pthread.h>
pthread_t pthread_self(void)
(1)类似于getpid函数,用于获取线程在某个进程内标识自身的ID;
(2)执行成功时返回线程ID;

4.pthread_detach函数

#include <pthread.h>
int pthread_detach(pthread_t tid)
(1)该函数将指定的线程变为脱离的;该函数通常由想让自己脱离的线程使用 pthread_detach(pthread_self());
(2)线程分为可汇合的(joinable)和脱离的(detached)。
当可汇合的线程终止时,其线程ID和退出状态将保留,直到另    外一个线程调用pthread_join;
脱离的线程像一个守护进程,当它终止时,所有资源都释放,所以不能用pthread_join等待它终止;
如果一个线程需要知道另一个线程的终止时间,那么需要保留后面那个线程的可汇合性;
(3)执行成功时返回0,执行失败时返回一个正的Exxx值。

5.pthread_exit函数

#include <pthread.h>
void pthread_join(void *status)
(1)该函数是终止一个线程的方式之一;
(2)如果该线程未脱离,则其线程ID和退出状态将一直保留到调用进程内的另外某个线程调用pthread_join为止;
(3)指针status不能指向局部于调用线程的对象。

二、终止一个线程三种方法

1.线程调用pthread_exit()函数;
2.线程启动函数调用return,返回值就是线程的终止状态;
3.所在进程的main()函数返回,或者某个线程调用了exit()和_exit()函数,那么该进程会立刻终止,包括它的仍在运行的任意线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值