注册会计师考试培训班视频网课-华宇网校
注册会计师考试培训班视频网课-华宇网校

注册会计师精讲班

专升本名师推荐

葛广宇

副教授,教学经验丰富

案例导向、关键词导向、风险导向教学。

课程试听

注册会计师习题班

专升本名师推荐

佟雪欣

博士,15年授课经验

颠覆以往审计学习无聊氛围、风趣幽默。

课程试听

注册会计师串讲班

专升本名师推荐

黄静

硕士,13年授课经验

阐述全面、细致、易懂,例题搭配恰当。

课程试听

注册会计师突击班

专升本名师推荐

储成兵

副教授,多年教学经验

擅长导入案例来剖析知识点,生动有趣。

课程试听

linux下C中怎么让才能安全关闭线程,linux如何关闭线程

时间:2023-02-01来源:华宇考试网作者:注册会计师视频 注册会计师在线课程
linux下C中怎么让才能安全关闭线程

linux下C中怎么让才可以安全关闭线程?

回答这个问题,第一得搞了解线程关闭或者退出有什么方法

线程的退出方法

假设进程中的任何线程调用exit,_Exit或_exit,则整个进程终止。 类似地,当信号的默认操作是终止进程时,发送到线程的信号将终止整个进程。单个线程可以有三种方法退出其控制流程,而不会终止整个进程。

1线程可以简单地从线程处理程序中返回,返回值是线程的退出代码。

2该线程可以被同一进程中的另一个线程取消。

3该线程可以调用pthread_exi

线程退出的返回值

#include pthread.h void pthread_exit(void *rval_ptr);#include pthread.h int pthread_join(pthread_t thread, void **rval_ptr);

pthread_join函数的rval_ptr参数是无类型指针。进程中的其他线程可以通过调用pthread_join函数来使用rval_ptr指针,调用它线程将阻塞,直到指定的线程调用pthread_exit或从其线程处理程序中返回或被取消。假设只是从其线程处理程序返回,则rval_ptr将包含返回码。假设线程被取消,则rval_ptr指定的内存位置设置为PTHREAD_CANCELED。

通过调用pthread_join,自动会将加入的线程放置在分离状态,假设线程已处于分离状态,则pthread_join可能会失败,返回EINVAL。假设我们对线程的返回值不感兴趣,我们可以将rval_ptr设置为NULL。在这样的情况下,调用pthread_join允许我们等着指定的线程,但不去检索线程的终止状态。

下图显示了如何从已终止的线程中获取退出代码

运行结果:

lj@lj-PC:~$ ./ptest

thread 1 returning

thread 2 exiting

thread 1 exit code 1

thread 2 exit code 2

线程如何取消

一个线程可以通过调用pthread_cancel函数请求取消同一进程中的另一个。

#include pthread.h int pthread_cancel(pthread_t tid);

在默认情况下,pthread_cancel将使tid指定的线程的行为就像它使用PTHREAD_CANCELED参数调用pthread_exit一样。 但是线程可以选择忽视或以他方法控制取消的方法。 请注意,pthread_cancel不会等着线程终止。

线程可以具体安排函数在退出时被调用,这些函数称为线程清理处理程序。 可以为一个线程建立多个清理处理程序。 处理程序记录在堆栈中,这算是它们的执行顺序与它们注册的顺序相反。

#include pthread.h void pthread_cleanup_push(void (*rtn)(void *), void *arg);void pthread_cleanup_pop(int execute);

当线程执行以下操作之一时,pthread_cleanup_push函数会被调用

调用pthread_exit

回复取消请求

使用非零执行参数调用pthread_cleanup_pop

假设execute参数设置为零,则不会调用cleanup函数。 在任何一种情况下,pthread_cleanup_pop都会删除后一次调用pthread_cleanup_push所建立的清理处理程序。

下图举比如何使用线程清理处理程序。

运行结果:

lj@lj-PC:~$ ./pclean

thread 1 start

thread 1 push complete

thread 2 start

thread 1 exit code 1

thread 2 push complete

cleanup: thread 2 second handler

cleanup: thread 2 first handler

thread 2 exit code 2

从输出中,我们可以看到两个线程都正常开始并退出,但只调用了第二个线程的清理处理程序。因为这个原因,假设线程是通过其处理函数直接返回而终止,则不会调用其清理处理程序,不过此行为在详细平台达到当中会带来一定不一样。另请注意,清理处理程序的调用顺序与安装它们的顺序相反。

假设我们在FreeBSD或Mac OS X上运行一样的程序,我们会发现该程序可能会造成段错误。出现这样的情况是因为在这些系统上,pthread_cleanup_push达到为在堆栈上存储某些上文和下文的宏。当线程1在对pthread_cleanup_push的调用和对pthread_cleanup_pop的调用当中返回时,堆栈被覆盖,并且这些平台在调用清理处理程序时尝试使用此(已损坏的)上文和下文。在Single UNIX Specification中,在对pthread_cleanup_push和pthread_cleanup_pop的一对匹配调用当中返回可能会造成未定义的行为。在这两个函数当中返回的唯一可移植方式是调用pthread_exit。

线程和进程的类似操作

从上文我们可以看到线程和进程的相似之处,见请看下方具体内容表格:

讲了这么多,还有不少细节没有讲到,只要具体了解了这些细节,我相信有关你的这个问题“linux下C中怎么让才可以安全关闭线程”自然就有了答案。

注册会计师考试资料下载

华宇考试网CPA注会免费资料下载

    百度云网盘资料 CPA注会视频课程

©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

    相关推荐:

注册会计师培训班-辅导课程

注册会计视频课程

>>注册会计培训班视频课程,听名师讲解<<

注册会计视频课程

>>注册会计培训班视频课程,听名师讲解<<

(编辑:华宇考试网相关博客:注册会计师)

    注册会计师视频热门资讯

  • linux下C中怎么让才能安全关闭线程,linux如何关闭线程

    linux下C中怎么让才可以安全关闭线程? 回答这个问题,第一得搞了解线程关闭或者退出有什么方法 线程的退出方法 假设进程中的任何线程调用exit,_Exit或_exit,则整个进程终止。 类似地,当信号的默认操作是终止进程时,发送到...

    2023-02-01

  • a2科目二考试流程完整版,A2科目二考试全过程

    a2科目二考试流程完整版? 科目二考试的详细流程:1、候考;2、进入考场,上车备考; 3、大车A1A2A3B1B2考试项目涵盖:桩考、坡道定点停车和起步、侧方停车、通过单边桥、曲线行驶、直角转弯、通过限宽门、通过连续障碍、起...

    2023-02-01

  • 山东聊城在岗职工人均,聊城日报工作怎么样

    山东聊城在岗职工人均? 平均工资是一项反映工资整体水平的指标,指企业、事业、机关单位的职工在一定时期内平均每人所得的货币工资额。它不一样于每一个人的详细工资水平。 一、 聊城市的低工资标准 聊...

    2023-01-31

  • 山西财经大学会计学院,山西财经大学的会计学院怎么样?

    山西财经大学会计学院? 山西财经大学的会计学院不错山西财经大学的会计学科为山西重点建设学科,会计实验中心为山西示范实验中心,你若喜欢,便是晴天。 山西财经大学的会计学院怎么样? 山西财经大学会计专业是山西财...

    2023-01-31

  • 苏州观山考场如何预约,苏州观山科目三哪个考场难考

    苏州观山考场如何预约? 周一到周五网络在线预约,大多数情况下初试上午8:30启动,下午13:30启动。 建议早一点0.5-1小时到达考场,因为需签到、提交材料、办理手续等。 假设你迟到了几分钟,多嘴的考官可能会让你继续参与考...

    2023-01-31