问题标签 [packaged-task]

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 投票
0 回答
81 浏览

c++ - C++ packaged_task 挂在并发包装器中

我正在实现 Herb Sutter 在他的演讲“C++ and Beyond 2012”中介绍的并发包装器。

基本上,这个想法是包装一个对象并使用 operation 以 FIFO 顺序提供线程安全访问()。但是,在某些运行中(并不总是发生),以下程序挂起:

但是,程序可以在没有显式调用get()方法的情况下正常工作。

可能是什么问题?我执行错了吗?我注意到这里有一个帖子说“在调用 f.get() 之前需要调用 packaged_task,否则你的程序将冻结,因为未来永远不会准备好。” 这是真的?如果是,我怎样才能解决这个问题?

-std=c++1z -pthread我正在使用with编译代码G++ 6.1

0 投票
1 回答
261 浏览

c++ - 将虚拟复制构造函数添加到 std::packaged_task

我试图绕过 std::packaged_task 缺少复制构造函数,以便我可以将它传递给 std::function (只会被移动)。

我从 std::packaged_task 继承并添加了一个虚拟复制构造函数,如果我从不复制它移入的 std::function,我认为不应该调用它。

用 gcc 6.2.1 编译它,我收到以下错误消息(只是结尾部分,如果你想要整个事情,请告诉我......):

错误消息对我来说是无法解析的,所以我想知道我是否做错了什么或者编译器是否失败。

0 投票
1 回答
54 浏览

c++ - 为什么在 GCC 上调用 std::package_task 失败

以下代码在 Microsoft 和 Clang 编译器上正常,但在 GCC 上失败。它抛出std::system_errormessage -1。是知道问题吗?

海合会

视觉 C++

0 投票
3 回答
1586 浏览

c++ - std::packaged_task 如何工作

我正在分析以下代码片段,并试图详细了解它:

我对std::packaged_task.

正如您在add(...)方法体中看到的, std::packaged_task-的实例task是局部变量,其作用域以方法执行结束而结束。type的返回值retstd::futurecopy返回的。的值ret是由task(本地的)给出的。因此,一旦方法执行完成,task就会超出范围,所以我希望返回的连接的 std::future 实例变得无效,我的理解是否正确?

在方法的执行过程中,要在线程中执行的任务方法被放置到std::queue<Job> jobs. 为什么只有指向 which 的指针operator()持有std::packaged_taskFunction给定方法参数的引用std::queue?我希望直接存储std::packaged_task以保存对正在创建的实例的引用......?

无论如何,源代码片段来自 ThreadPool 实现,可以在这里找到https://github.com/dabbertorres/ThreadPool并且似乎完全可以工作。所以我认为这是正确的,但不幸的是我并不完全清楚......如果有人能解释这些东西是如何工作的,我会很高兴......

非常感谢任何愿意提供帮助的人。干杯马丁

0 投票
2 回答
261 浏览

c++ - 为什么在 VS 中需要 packaged_task 的复制构造函数

我想在 packaged_task 中包装一个对象实例,如下所示:

我收到“错误 C2280: 'MoveOnlyOperation::MoveOnlyOperation(const MoveOnlyOperation &)': 试图引用已删除的函数

C++ 11 的文档说,尽管可以完美地转发 packaged_task 中的实例。我也没有clang的问题。

它定义了一些关于如何实现 packaged_task 的实现或 VS 2015 中的错误(可能稍后因为我遇到与http://rextester.com/WBEH22233相同的问题)

0 投票
1 回答
306 浏览

c++ - 为什么`packaged_task`没有推导指南?

我天真地期待这个编译:

说明:这可能来自线程池实现,enqueue()只是将参数排队以在工作线程上执行。

然而,问题是没有 的推导指南packaged_task,因此 C++17 构造函数模板参数推导当然会失败。

那么,为什么没有扣除指南呢?

0 投票
1 回答
579 浏览

c++ - 将 std::packaged_task 添加到现有线程?

是否有标准方法可以将 a 添加std::packaged_task到现有线程?在任务运行之前必须发生大量开销,所以我想这样做一次,然后保持线程运行并等待任务执行。我希望能够使用期货,因此我可以选择获取任务的结果并捕获异常。

我的 C++11 之前的实现要求我的任务从带有Run()方法的抽象基类继承(有点痛苦,不能使用 lambdas),并且有一个std::deque我在主线程中添加的集合和从工作线程中出列。我必须保护该集合不被同时访问,并向工作线程提供一个信号,表明有事情要做,因此它不会旋转或休眠。将某些内容加入队列会返回一个“结果”对象,该对象带有一个等待任务完成的同步对象,以及一个结果值。这一切都很好,但如果有更好的东西,是时候升级了。

0 投票
1 回答
69 浏览

c++ - 打包任务参数是否存在数据竞争?

通过打包的任务创建一个线程并std::vector返回一个。

std::future保证向量与线程同步(main之前join),但我不确定打包任务参数的状态(通过引用传递)。

所以问题是是否存在数据竞赛arg

0 投票
1 回答
108 浏览

c++ - 在 lambda 中包装并执行 packaged_task

我正在尝试将 packaged_task 包装在 lambda 中,以便将它们存放在容器中。我在下面编写了一个测试代码,用于模拟包装和调用 lambda 函数。我的代码如下:

该程序因以下异常而中止:

抛出“std :: system_error”实例后调用终止what():未知错误-1中止(核心转储)

有人能解释一下为什么抛出异常吗?

0 投票
0 回答
102 浏览

c++11 - 传递 packaged_tasks 队列作为参考时出现编译错误

当我尝试将包含 packaged_task 对象的队列作为参考传递给线程时出现编译错误。我修改了示例代码以将其传递给函数并观察到相同的编译错误