问题标签 [ppl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1186 浏览

parsing - 左递归和右递归是否产生相同的解析树?

这是右递归语法:

这是左递归语法:

这些语法会为字符串 B + C + A 生成相同的解析树吗?下图是左递归。

在此处输入图像描述

但是,我为右递归绘制了解析树,它在节点的位置之间有点不同。我不知道我所做的是否正确。所以我想知道左递归和右递归会产生两个不同的解析树或者应该是相同的解析树。请帮助澄清这个问题。谢谢。

0 投票
1 回答
330 浏览

c++ - C++ 并发::concurrent_vector

我在使用线程时遇到以下代码问题。

我在 Microsoft 网站上读到,附加到concurrent_vector不会与迭代器混淆,所以我没有mutex在操作期间提供和find_if

所以我收到的错误是“访问冲突”

我有 6 个线程同时运行。我应该把它包起来mutex吗?是不是需要一个。我对 C++ 相当陌生。

0 投票
1 回答
4304 浏览

c++ - C++ REST SDK:异步任务与 C++11 多线程

这是一个关于 C++ REST SDK 的异步任务功能的概念性问题(也许也是一个菜鸟问题)。

在一个基本应用程序中,我有一个客户端并执行几个请求,例如

(for-loop只是表示请求经常发送,我并没有真正在我的代码中使用它)。

问题:

  • 据我了解,异步任务库然后以并行方式处理这些传入请求 - 这意味着不是主线程以类似事件的方式处理所有任务,而是该库将任务分配给某些底层线程池(——对我来说是不透明的——)方式。我说对了吗?

  • 如果前面的观点是正确的,那么还有什么理由将 REST SDK 与 C++ 的多线程能力结合起来。例如,再次采用上述循环,启动 10 个线程,并在每个进程中进行 10 次循环迭代。这有意义还是没有必要?

  • 此外,一般来说,是否有任何常见的模式应该通过 C++11 多线程特性结合 ppl 功能?或者,依靠 REST SDK 和 ppl 来更好地完成工作是否安全?

(信息:我也在cpprest 讨论页面上问过这个问题。但是,这个论坛似乎不再维护了。)

0 投票
0 回答
90 浏览

c++ - 定义并发的核数::parallel_for

我正在使用concurrency::parallel_forppl.hWindows)。我可以指定必须使用的核心数吗?或者至少是最大核心数?

0 投票
2 回答
1446 浏览

c++ - Windows std::thread 是否在内部使用 PPL?

Visual Studio 2015 的 std::thread 内部实现是否基于 PPL 的任务系统?

我的问题的背景是,将 std::thread 用于多个任务是否有意义,因为它们已经在公共线程池上平衡执行,还是通过 PPL 任务执行任务更好?

根据(which std::async implementations use thread pools?)这似乎是,但由于这个问题相当老,我想得到一个“官方”的答案。

0 投票
2 回答
738 浏览

delphi - Delphi - 使用并行编程库中的 IFuture 读取大文件

我正在阅读一些需要“年龄”才能加载的大型(ish)excel文件。我可以在我真正需要访问它之前加载它。所以我认为这将是并行编程库中的 IFuture 的一个很好的用途。但我不确定如何去做,因为所有“未来”示例只涵盖简单类型,如字符串、整数等。

这是非并行代码:

其中“xls”是 Excel 对象,“s”是内存流。

“未来”将如何解决这个问题?我可以将 xls 声明为...

这个对吗。如果是,那么我是否需要像普通的 TsmXLSFile 一样释放它,因为它现在是一个接口?

史蒂夫

0 投票
2 回答
2800 浏览

c++ - 迭代器中的代理对象

我有一个属于某个类的项目的大向量。

同样class_id的在向量中可以出现多次,向量构造一次后排序class_id。因此,同一类的所有元素在向量中彼此相邻。

我稍后必须处理每个班级的项目,即。我更新了同一类的所有项目,但我不修改不同类的任何项目。由于我必须对所有项目执行此操作,并且代码可轻松并行化,因此我想将 Microsoft PPL 与Concurrency::parallel_for_each(). 因此,我需要一个迭代器并提出了一个前向迭代器,它返回具有某个class_id代理对象的所有项目的范围。代理只是一个std::pair,代理是迭代器的值类型。

到目前为止,我已经能够遍历我的所有课程并更新这样的项目。

当用代码替换std::for_eachConcurrency::parallel_for_each崩溃了。调试后,我发现问题出_Parallel_for_each_helper在 ppl.h 中第 2772 行的以下代码。

它使用后增量(因此返回一个临时迭代器),取消引用该临时迭代器并获取取消引用项的地址。这仅在通过取消引用临时对象返回的项目存在时才有效,即。基本上,如果它直接指向容器。所以解决这个问题很容易,尽管std::for_each必须用 for 循环替换每个类的工作循环。

我的问题是,如果以我的方式返回代理对象是否违反了标准,或者是否假设每个迭代器都取消引用到永久数据中是由 Microsoft 为其库做出的,但没有记录在案。至少我找不到任何关于迭代器要求的文档,parallel_for_each()除了随机访问或前向迭代器。我已经看到了关于前向迭代器和向量的问题,但是由于我的迭代器的引用类型是const value_type&我仍然认为我的迭代器按照标准是可以的。那么返回代理对象的前向迭代器仍然是有效的前向迭代器吗?或者换一种说法,迭代器的值类型与实际存储在容器中某处的类型不同是否可以?

可编译示例:

0 投票
0 回答
256 浏览

c++ - VS2015 SP2 中的并发::parallel_for

我们在我们的软件中使用 parallel_for 来轻松地并发执行一些工作。现在我在https://msdn.microsoft.com/en-us/library/hh409293(v=vs.140).aspx中阅读了重大更改 + https://blogs.msdn.microsoft.com/vcblog中的博客/2015/07/14/stl-fixes-in-vs-2015-part-2/开始担心了。

  1. 意味着我不能在 parallel_for 中使用任何同步对象,那么至少所有对象都基于操作系统同步原语?如果答案是肯定的,那么 MS 如何期望在 parallel_for 中同步任何内容?
  2. 有没有人知道在操作系统调度程序和 ConRt 调度程序之间会出现死锁的情况下如何在博客中描述?有人遇到过这种僵局吗?如果这是真的,parallel_for 就完全没有意义了。

谢谢回复!

0 投票
1 回答
544 浏览

c++ - shared_ptr 与 new 运算符:使用哪一个

在下面的函数中,我利用http_clientcpprestsdk ( https://github.com/Microsoft/cpprestsdk ) 向网络摄像机发出 http 请求。下面的函数可能是在发出某个请求时由 lcm 库 ( http://lcm-proj.github.io/ ) 调用的回调。

我在第 11 行遇到了问题。我之前使用的是 new 运算符:

在退出函数之前创建指针并手动删除它。init_session_response但是在第 49 行尝试修改 pplx 任务继续中的对象时出现访问冲突异常。

当我开始使用 std::shared_ptr 时,这个问题就消失了。有人可以向我解释为什么使用 shared_ptr 解决了这个问题吗?是否也应该使用 std::shared_ptr 创建 http_client*?

0 投票
0 回答
182 浏览

c++ - Visual C++:并行模式库 - 如何取消工厂方法返回的任务?

根据 MSDN,我可以按如下方式取消任务:

但是我怎样才能取消这样的工厂方法返回的任务: