当前位置:   article > 正文

多线程和线程池的c++实现_c++多线程释放

c++多线程释放

多线程和线程池的c++实现

1. linux pthread库中对线程的操作

1.1 线程的创建和资源回收

每一次调用pthread_create()都会创建一个子线程,如果子线程是joinable,则
必须显式调用pthread_detach()将其变为non-joinable自行释放资源
or 显式调用pthread_join()由主线程为其释放资源,否则会造成内存泄露.
默认创建的线程是joinable的.

这里的资源到底是啥?

  1. 子线程从父线程拷贝的栈内存,使用pthread_join()由父线程清理或
    pthread_detach()由系统清理,如pthread_create之前父线程中的局部变量
  2. 子线程自己申请的堆内存,使用清理函数pthread_cleanup_push()
    和pthread_cleanup_pop(), 如线程内部malloc或new出的空间
    参见https://www.cnblogs.com/cthon/p/9078042.html, TODO

线程执行的函数其中的参数,返回值,局部变量在线程执行完毕离开函数后均会自动
释放,不在这里所说的资源范围内

如果主线程想要使用子线程的结果,则不能自顾自的直接返回,由2种可选方式:

  1. pthread_join()阻塞主线程直到子线程返回释放子线程的资源
    优点: 主线程阻塞,不占用cpu资源
    缺点: 有些业务情境下不希望主线程阻塞,主线程需要做其他的事情
  2. pthread_detach()由子线程自己结束后自行释放资源,主线程使用while (true)
    死循环持续运行
    优点: 主线程并未阻塞,可以处理其他事情
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/1014173
推荐阅读
相关标签
  

闽ICP备14008679号