C++并发实战15:函数式编程

本文探讨了函数式编程在C++中的应用,特别是C++11引入的lambda表达式、std::bind和std::function如何支持函数式编程。通过举例说明,阐述了如何利用函数式编程思想简化并行化编程,避免传统方法中的共享内存和状态同步问题。同时,提到了communicating sequential processes (CSP)编程模型,强调线程间的独立性和通过消息传递进行通信。
摘要由CSDN通过智能技术生成

1  函数式编程        

   函数y=f(x)就是个x->y的映射,其仅仅是x和y的关系,其运算关系仅仅是依赖参数x并不涉及其它外部状态,函数式编程中就把每个函数理解为数学意义上的函数f(x)。在函数式编程中,每个语句是一个表达式都是执行单纯的计算并有返回值,而C中的语句是执行某种操作如赋值,且计算是由函数完成的,仅仅依赖于输入参数。如一条简单的函数语句,功能是(1+2)*3-4:

var result = subtract (multiply (add (1,2), 3), 4); 
其运算过程是不同的函数组成的。函数和其它数据类型一样平等的,可以作为参数、返回值,且函数式编程中变量是不变的可以理解为都是const,这就表明函数式编程不改变对象的状态。函数内部不与外部互动(不会涉及修改全局变量等),从而利于并行化。函数编程还有个特点是具备重现能力。

         C++中本身也具有函数式的身影,比如:sin,cos这些函数。C++11中的lambda表达式,std::bind,std::function,std::auto均为函数式编程实现提供了可能。这里将采用函数式来简化并行化编程,在传统的并行化编程中涉及到共享内存、状态等,使用mutex、condition_variable等机制同步线程,而在函数式编程中每个函数只与输入参数相关且不修改外部状态,只负责计算,这使得某些并行化计算可以采用函数式编程思想。

         1.1 下面是传统的快速排序采用递归实现的例子:(非稳定排序)

template<typen
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值