线程池c++

1. linux pthread库中对线程的操作
1.1 线程的创建和资源回收

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

这里的资源到底是啥?

  • 子线程从父线程拷贝的栈内存,使用pthread_join()由父线程清理或pthread_detach()由系统清理,如pthread_create之前父线程中的局部变量
  • 子线程自己申请的堆内存,使用清理函数pthread_cleanup_push()和pthread_cleanup_pop(), 如线程内部malloc或new出的空间
pthread_join()阻塞主线程直到子线程返回释放子线程的资源
优点: 主线程阻塞,不占用cpu资源
缺点: 有些业务情境下不希望主线程阻塞,主线程需要做其他的事情
pthread_detach()由子线程自己结束后自行释放资源,主线程使用while (true)
死循环持续运行
优点: 主线程并未阻塞,可以处理其他事情
缺点: 主线程持续占用cpu资源

1.2 线程的互斥和同步

2. 生产者-消费者的多线程模型

    /*工作线程运行的函数,它不断从工作队列中取出任务并执行之*/
    static void *worker(void *arg);
全部评论

相关推荐

04-25 18:13
五邑大学 Java
后来123321:大二两段实习太厉害了,我现在大二连面试都没有
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务