C++多线程-第四篇-Thread_group(线程池)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hffhjh111/article/details/53141553

thread_group--线程池

Thread_group用于管理一组线程,类似一个线程池,使用std::list<thread*>来荣纳创建的thread对象

 

Thread_group类摘要


 
 
  1. Class thread_group //不可拷贝
  2. {
  3. Public:
  4. Thread * create_thread(F threadFunc); //创建新线程
  5. Void add_thread(thread * thrd); //添加已有线程
  6. Void remove_thread(thread* thrd); //删除线程
  7. Bool is_this_thread_in(); //当前线程是否在组内
  8. Bool is_thread_in(thread * t); //指定的线程是否在组内
  9. Void join_all(); //等待所有线程
  10. Void interrupt_all(); //中断所有线程
  11. Int size(); //获得线程数量
  12. };


Create_thread()是工厂函数,可创建thread对象并运行,同时加入到内部LIST中,但他不支持传递函数参数,所以通常要用bind或者lambda来包装执行的函数。

可以通过先创建线程对象,后加入线程池。


扩展:future+async()+promise+barrier+本地存储

Future范式提供了异步操作线程返回值的方法,如此叫的原因是这个返回值在线程开始执行时还是不可用,是一个未来的期待值。

早期future == unique_future 即只能调用一次get(),他不能被多线程并发访问。

而shared_future是其增强版,可多次线程安全的调用get(),其他基本与unique_future一致

 

Promise 配合thread使用,可作为函数的输出参数,可以利用set_value/get_value传出future.

 

Barrier是thread基于条件变量提供的另一种同步机制,可用于多个线程同步。

当直行至barrier时必须等待,直到所有线程都到达这个点才可以继续。

Barrier又称为rendezvous(约会地点)

 

本地存储。引入原因:有用到局部静态变量或者全局静态变量的函数不可用于多线程环境,因为无法保证多线程变量在多线程环境下的重入时的正确性。

 

This_thread::at_thread_exit(function f)保证被此调用的函数在线程异常中断时仍被调用。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值