c主线程如何等待子线程结束 linux_linux c之使用pthread_create创建线程pthread_join等待线程和pthread_exit终止线...

1、介绍API1、pthread_create函数

函数简介pthread_create是UNIX环境创建线程函数头文件#include函数声明int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);

返回值若成功则返回0,否则返回出错编号参数第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址, 最后一个参数是运行函数的参数。另外在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非linux系统的默认库

2、pthread_join函数

函数简介函数pthread_join用来等待一个线程的结束。函数原型为:extern int pthread_join __P (pthread_t __th, void **__thread_return);

然后尝试编译运行程序的时候你会发现程序似乎什么也没干就退出了,是的,那是因为程序的主线程退出的时候操作系统会关闭应用程序使用的所有资源,包括线程……所以在main函数结束前我们得想办法让程序停下来,pthread_join方法的功能就是等待线程结束,要等的线程就是第一个参数pthread t 头文件,程序会在这个地方停下来,直到线程结束,第二个参数用来接受线程函数的返回值,是void**类型的指针,如果没有返回值pthread t 头文件,就直接设为null吧。c、当其他线程调用pthread_cond_signal或pthread_cond_broadcast时,会唤醒相应条件变量等待的线程,此时被唤醒的线程,可以参与调度了,此时被唤醒的线程继续执行pthread_cond_wait()函数,函数pthread_cond_wait()返回之前,会重新给条件变量对应的互斥量上锁,在这里就是nready.mutex,若该函数成功返回,则当前线程有重新获得了nready.mutex锁,当然nready.mutex也可能被其他线程继续占有,此时线程再次阻塞。考虑一种getasynckeystate的实现:线程先设置中断函数,再等待一个事件,中断到来时发现该线程中断函数指针非空于是执行函数,函数内部查询最新按键状态然后触发事件,中断结束后线程从等待的事件中被唤醒,最后返回按键状态。

3、pthread_exit函数

函数原型void pthread_exit(void* retval);函数简介线程通过调用pthread_exit函数终止执行,就如同进程在结束时调用exit函数一样。这个函数的作用是,终止调用它的线程并返回一个指向某个对象的指针。

2、爆图爆代码

实现创建2个线程打印数据

3、结果展示

我们知道pthread_t得大小是8

所以,一般情况下,父线程退出时都要确保子线程已经退出,所以会使用pthread_join()函数阻塞等待子线程的退出信号/标识。$ 显示最后命令的退出状态,0表示无错误(这个变量也常常用来打印输出,在脚本调试时标记某个shell命令或某个函数是否正确执行,但是要注意,$ 记载的是最近的函数或命令的退出状态,因此打印时应该立即打印以获得正确的信息)。可以通过pthread_join函数来使主线程阻塞等待其他线程退出。

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-109601-1.html


版权声明:本文为weixin_35645230原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。