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(),他不能被多线程并发访问。

扫描二维码关注公众号,回复: 3555916 查看本文章

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

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

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

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

Barrier又称为rendezvous(约会地点)

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

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




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

猜你喜欢

转载自blog.csdn.net/monk1992/article/details/82868530
今日推荐