// 忽略警告
#define _SCL_SECURE_NO_WARNINGS
#pragma warning(disable : 4996)
#include <assert.h>
#include <iostream>
#include <boost/thread.hpp>
#include <stack>
using namespace boost;
using namespace std;mutex io_mu;
class rw_data
{
private:int m_x;shared_mutex rw_mu;        // 共享互斥量
public:rw_data() :m_x(0){}void write(){unique_lock<shared_mutex> ul(rw_mu);    // 写锁定++m_x;}void read(int *x){shared_lock<shared_mutex> sl(rw_mu);    // 读锁定*x = m_x;}
};// 写线程
void writer(rw_data& d,int a)
{string s = "writer" + to_string(a) + ":";for (int i = 0; i < 20; ++i){this_thread::sleep(posix_time::millisec(10));d.write();cout << s << endl;}
}// 读线程
void reader(rw_data& d,int a)
{int x;string s = "reader" + to_string(a) + ":";for (int i = 0; i < 10; ++i){this_thread::sleep(posix_time::millisec(5));d.read(&x);mutex::scoped_lock lock(io_mu);cout << s << x << endl;}
}int fab(int n)
{if (n == 0 || n == 1)return 1;return fab(n - 1) + fab(n - 2);
}void fab2(int n, promise<int>* p)
{return p->set_value(fab(n));
}
int main()
{//rw_data d;//thread_group pool;//pool.create_thread(boost::bind(reader, boost::ref(d),1));    // 读线程1//pool.create_thread(boost::bind(reader, boost::ref(d),2));    // 读线程2//pool.create_thread(boost::bind(reader, boost::ref(d),3));    // 读线程3//pool.create_thread(boost::bind(reader, boost::ref(d),4));    // 读线程4//pool.create_thread(boost::bind(writer, boost::ref(d),5));    // 写线程1//pool.create_thread(boost::bind(writer, boost::ref(d),6));    // 写线程2//pool.join_all();// future得到线程返回的结果// packaged_task与future配合 只接受无参函数,因此需要使用bind,模板参数知名返回值类型packaged_task<int> pt(boost::bind(fab, 10));unique_future<int> uf = pt.get_future();// 接收future值thread(boost::move(pt));// 启动计算线程,必须先使用boost::move()来转移packaged_task对象(不可拷贝)uf.wait();    // 等待计算结果assert(uf.is_ready() && uf.has_value());cout << uf.get();// 输出计算结果// 多个future存放在数组容器中// array<packaged_task<int>, n>// array<unique_future<int>, n>// wait_for_all(begin, end);全部等待计算// promise与future配合promise<int> p;unique_future<int> uf = p.get_future();thread(fab2, 10, &p);// 启动计算线程uf.wait();cout << uf.get() << endl;return 0;
}

线程3 boost::future相关推荐

  1. boost::future相关的测试程序

    boost::future相关的测试程序 实现功能 C++实现代码 实现功能 boost::future相关的测试程序 C++实现代码 #include <boost/config.hpp> ...

  2. 多线程创建方式 线程池、Future和CompletableFuture

    大家好,我是烤鸭: 今天说一下 多线程的几种创建方式及使用. 1. Thread 和 Runnable 继承 Thread 类 和实现 Runnable 接口.     这种就不举例子了. 2.线程池 ...

  3. boost 线程 linux,Boost Linux线程第一课

    #include #include void ThreadFunc() { std::cout< } int main() { boost::thread thrd1(&ThreadFu ...

  4. java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...

    学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...

  5. Boost库实现线程池学习及线程实现的异步调用

    A.Boost线程池实现 参考自: Boost库实现线程池实例 原理:使用boost的thread_group存储多个线程,使用bind方法将要处理的函数转换成线程可调用的函数进行执行:使用队列存储待 ...

  6. 9 C++ Boost 多线程,线程同步

    线程的创建 boost_thread,boost_system 多线程的创建 线程的参数传递 线程的创建方式 线程的join 加入join,回收线程线程中断 线程中断2, 线程组 boost 线程的死 ...

  7. Future取消线程执行

    [README] 本文总结于 <java并发编程实战> page121,非常棒的一本书: [1]Future 1,介绍:future 用于管理任务的生命周期,处理异常,以及实现取消: 2, ...

  8. boost线程(二)

    1 创建线程 就像std::fstream类就代表一个文件一样,boost::thread类就代表一个可执行的线程.缺省构造函数创建一个代表当前执行线程的实例.一个重载的构造函数以一个不需任何参数的函 ...

  9. Java并发编程之线程池中的Future

    线程池中的Future: 线程池的典型使用场景 ExecutorService executorService = Executors.newFixedThreadPool(10);//此处Task为 ...

最新文章

  1. kill -3 获取threaddump信息---转载
  2. CSS中content和attr的用法
  3. LTP(LinuxTest Project)测试工具
  4. Payara Micro在Oracle应用容器云上
  5. Win10乱码了怎么解决 Win10系统乱码解决办法
  6. python接口测试框架django_开源~自研接口测试平台 Django2.0+Vue
  7. 从文件夹中批量抽取(复制or剪切)文件 批处理脚本
  8. 供应链B2B项目一直赚不到钱
  9. vscode 格式化文件配置说明
  10. 读 Robert C. Solomon 之《大问题:简明哲学导论》兼序
  11. 计算机网路基础课后习题答案 主编刘建友
  12. js的validate插件异步效验
  13. OpenCV:vector subscript out of range
  14. Topit.me:小清新+文艺范的视觉社交平台
  15. MDT2008部署杂谈2——简介
  16. 2022年G2电站锅炉司炉考试试题及模拟考试
  17. 3星|《财经》2018年第5期:西伯利亚冻土层的猛犸象牙是合法的,一根能卖到数万美元...
  18. 查看安卓手机文件系统方法
  19. Ubuntu下codeblocks的安装和配置
  20. 杭州金田电磁转换器MODBUS通讯协议

热门文章

  1. Oracle GoldenGate Monitor agent安装后的报错OGGMON-20603
  2. django-ckeditor配置使用markdown语法
  3. magic-api的使用体验
  4. 微尘,心中的那一抹思念
  5. Oauth2 中 access_token和refresh_token的过期时间
  6. 微信公众号/企业微信插件用python的操作
  7. 2022版本微信开发者工具引入less插件
  8. ie调用java闪退_win7旗舰版系统位数不兼容导致IE浏览器频繁出现闪退怎么办
  9. Bearer token
  10. 阿里云服务器怎么样可以安装Clamav免费杀毒工具