嵌入式学习(linux多线程部分)

wait:

1、获取子进程的退出状态

2、回收资源(让僵尸态子进程销毁)

pid_t  wait(int *status)

status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。

  • 阻塞:父进程等待子进程运行完后退出;这就是阻塞
  • 非阻塞:父进程不等子进程运行是否运行完毕就退出,这样可能会导致孤儿进程;这就是非阻塞

waitpid函数

pid_t  waitpid(pid_t pid , int *wststus, int options)

返回值:
等待成功,返回子进程退出码
非阻塞等待,没有等到子进程则返回0,等待失败-1,成功返回子进程退出码

pid:等待此进程状态改变;

wstatus:获取到子进程状态信息;

options:选项。

               默认:O ,阻塞;

                          WNOHANG,不阻塞

waitpid:想处理子进程,必须嵌套在循环中使用。

线程:轻量级进程(cpu执行的最小单位)

进程:重量级进程(资源分配的基本单位)

线程:  创建和调度的时空开销较小

1、存在于进程中

2、共享了进程的资源

3、结束进程不一定结束进程

新线程:

int   pthread_create  (  pthread_t *thread  ,   const pthread_attr_t *attr   ,                                                                              void *(*start_routine) (void *)  ,   void *arg);

thread:传出参数,thread参数是 pthread_t 类型的指针,线程创建成功的话,会将分配的线程ID填入该指针指向的地址。线程的后续操作将使用该值作为线程的唯一标识。
attr:传入参数,第二个参数是 pthread_attr_t 类型,通过该参数可以定制线程的属性,比如可以指定新建线程栈的大小、调度策略等。 如果创建线程无特殊的要求, 该值也可以是NULL, 表示采用默认属性。
start_routine:传入参数,第三个参数是线程需要执行的函数。创建线程,是为了让线程执行一定的任务。线程创建成功之后,该线程就会执行start_routine函数,该函数之于线程,就如同 main 函数之于主线程。
arg:第四个参数是新建线程执行的 start_routine 函数的入参。新建线程如果想要正常工作,则可能需要入参,那么主线程在调用 pthread_create 的时候,就可以将入参的指针放入第四个参数以传递给新建线程。如果多个入参,可以使用结构体指针。

pthread_t pthread_self(void);

pthread_self函数用于在线程指向函数中获取自身线程ID,这个函数不会调用失败,返回值就是线程ID。

结束线程:

void pthread_exit(void *retval);

函数终止调用线程,并通过返回一个值,如果线程是可连接(使用pthread_join连接)的,该值可用于调用 的同一进程中的另一个线程

线程等待
int  pthread_join (pthread_t  thread, void **retval);

调用这个函数的线程将一直阻塞,直到指定的线程调用pthread_exit、从启动例程中返回或者被取消。

如果对线程的返回值不感兴趣,可以把retval置为NULL。在这种情况下,调用pthread_join函数将等待指定的线程终止,但并不获得线程的终止状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值