zoukankan      html  css  js  c++  java
  • 重读APUE(14)-主线程终止对子线程的影响

    在main中创建线程,我们称main线程为主线程,新建线程为子线程(其实没有什么主线程和子线程的父子概念,它们是平行的,为了好理解这样称呼),如果子线程内部执行相对比较耗时的操作,主线程执行的快,而且没有等待子线程执行完毕,此时主线程退出,进程被销毁,就会导致子线程无法执行完毕;

    可以采用如下方式确保子线程执行完毕:

    1. 主线程中采用pthread_join阻塞等待子线程结束,并回收资源;

    man手册对于该函数的描述:

    The pthread_join() function waits for the thread specified by thread to terminate.

    2. 主线程调用pthread_exit结束主线程;此时进程不会调用exit,而是会等待所有线程执行完毕后才执行exit;

    man手册对于该问题的描述:

    When a thread terminates, process-shared resources (e.g., mutexes, condition variables, semaphores, and file descriptors) are not released, and functions registered using atexit(3) are not called. After the last thread in a process terminates, the process terminates as by calling exit(3) with an exit status of zero; thus, process-shared resources are released and functions registered using atexit(3) are called.

    3. 线程同步方式,主线程等待某个子线程的条件发生后,才退出;

    需要注意的是线程分离,并不会影响退出;

    线程分离,只是说线程结束会自动回收资源,不需要用pthread_join等待;当主线程退出时,子线程也一样会被销毁;

    man手册对于该问题的描述:

    The detached attribute merely determines the behavior of the system when the thread terminates; it does not prevent the thread from being terminated if
    the process terminates using exit(3) (or equivalently, if the main thread returns).

  • 相关阅读:
    Android Studio 优秀插件: Parcelable Code Generator
    Android Studio 优秀插件:GsonFormat
    DrawerLayout(抽屉效果)
    Python拼接字符串的七种方式
    Python爬虫教程-使用chardet
    Python爬虫教程-实现百度翻译
    Tensorflow分布式部署和开发
    简单的Python GUI界面框架
    用keras构建自己的网络层 TensorFlow2.0教程
    Python GUI教程一:Hello World
  • 原文地址:https://www.cnblogs.com/wanpengcoder/p/11764894.html
Copyright © 2011-2022 走看看