RAD Studio XE7 提供了针对 Object Pascal 和 C++ 的任务并行库

  • Jonathan Allen
  • 陈俊宇

2014 年 11 月 10 日

话题:C++AndroidiOS语言 & 开发

RAD Studio XE7的一个主要特性是其并行编程库Parallel Programming Library)。XE7 为包括 Windows、OS X、iOS 和 Android 在内的多个平台提供了基于任务的并行处理能力。跟 Mono 不同的是,这组工具为所有的目标平台提供了完全的原生应用。

XE7 并行编程库的核心是 task 和 future 。它们同时提供了接口(ITaskIFuture)和类(TTaskTFuture)供用户使用。这和.NET 的 Task 和 Task<T> 类是一样的。

当处理不连续的操作时,task 和 future 通常是独立使用的。想并行处理一组操作,可以使用封装器 。比如, 如果想并行化一个 for 循环,可以使用下面这段代码来抽象任务逻辑:

TParallel.For(1, Max, procedure (I: Integer)
    begin
        if IsPrime (I) then
        TInterlocked.Increment (TotalPrimes);
    end);

对于那些不熟悉 Object Pascal 的人来说,这里的 procedure 关键字创建了一个匿名函数。这跟 VB 的 Function 关键字和 C# 的箭头语法的行为相似。

请注意 TInterlocked.Increment 类的用法。这是 Windows 平台的 Interlocked.Increment 对应的一个平台无关版本。没有它,TotalPrimes 计数可能会由于资源竞争而导致错误。因此,虽然这个库简化了并行编程,但是开发人员仍然需要确保正确地使用它。

并行编程库的一个主要缺点不是代码本身,而是文档。在所提供的 18 个类和类型中,只有 7 个有文档,而文档也只是一行文字描述。虽然对免费或者开源的库来说,有时也是可以接受的,但是对于一个现代的商业产品,却是很少见的。

查看英文原文:A Task Parallel Library for Object Pascal and C++


感谢臧秀涛对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

C++AndroidiOS语言 & 开发