线程3 boost::future
// 忽略警告
#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相关推荐
- boost::future相关的测试程序
boost::future相关的测试程序 实现功能 C++实现代码 实现功能 boost::future相关的测试程序 C++实现代码 #include <boost/config.hpp> ...
- 多线程创建方式 线程池、Future和CompletableFuture
大家好,我是烤鸭: 今天说一下 多线程的几种创建方式及使用. 1. Thread 和 Runnable 继承 Thread 类 和实现 Runnable 接口. 这种就不举例子了. 2.线程池 ...
- boost 线程 linux,Boost Linux线程第一课
#include #include void ThreadFunc() { std::cout< } int main() { boost::thread thrd1(&ThreadFu ...
- java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...
学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...
- Boost库实现线程池学习及线程实现的异步调用
A.Boost线程池实现 参考自: Boost库实现线程池实例 原理:使用boost的thread_group存储多个线程,使用bind方法将要处理的函数转换成线程可调用的函数进行执行:使用队列存储待 ...
- 9 C++ Boost 多线程,线程同步
线程的创建 boost_thread,boost_system 多线程的创建 线程的参数传递 线程的创建方式 线程的join 加入join,回收线程线程中断 线程中断2, 线程组 boost 线程的死 ...
- Future取消线程执行
[README] 本文总结于 <java并发编程实战> page121,非常棒的一本书: [1]Future 1,介绍:future 用于管理任务的生命周期,处理异常,以及实现取消: 2, ...
- boost线程(二)
1 创建线程 就像std::fstream类就代表一个文件一样,boost::thread类就代表一个可执行的线程.缺省构造函数创建一个代表当前执行线程的实例.一个重载的构造函数以一个不需任何参数的函 ...
- Java并发编程之线程池中的Future
线程池中的Future: 线程池的典型使用场景 ExecutorService executorService = Executors.newFixedThreadPool(10);//此处Task为 ...
最新文章
- kill -3 获取threaddump信息---转载
- CSS中content和attr的用法
- LTP(LinuxTest Project)测试工具
- Payara Micro在Oracle应用容器云上
- Win10乱码了怎么解决 Win10系统乱码解决办法
- python接口测试框架django_开源~自研接口测试平台 Django2.0+Vue
- 从文件夹中批量抽取(复制or剪切)文件 批处理脚本
- 供应链B2B项目一直赚不到钱
- vscode 格式化文件配置说明
- 读 Robert C. Solomon 之《大问题:简明哲学导论》兼序
- 计算机网路基础课后习题答案 主编刘建友
- js的validate插件异步效验
- OpenCV:vector subscript out of range
- Topit.me:小清新+文艺范的视觉社交平台
- MDT2008部署杂谈2——简介
- 2022年G2电站锅炉司炉考试试题及模拟考试
- 3星|《财经》2018年第5期:西伯利亚冻土层的猛犸象牙是合法的,一根能卖到数万美元...
- 查看安卓手机文件系统方法
- Ubuntu下codeblocks的安装和配置
- 杭州金田电磁转换器MODBUS通讯协议