2

我正在开发 c++ 应用程序来处理大量的报价数据,例如。(MSFT、AMZN 等)与 tbb。并且想知道我将如何构建它。我一直在研究parallel_for 和pipeline 以及concurrent_queue。

该过程基本上会解析数据,对其进行处理并输出到文件。解析和处理可以并行完成,但每个符号的输出应该是有序的。

例如。输入:
    - 消息 #1 - AMZN #1
    - 消息 #2 - AMZN #2
    - 消息 #3 - IBM #1
    - 消息 #4 - AMZN #3
    - 消息 #5 - CSCO #1
    - 消息 $6 - IBM #2

我想使用无锁解决方案或最小锁定,但似乎我保留在 concurrent_queue 中以保持订单。

任何想法都会有所帮助

谢谢,大卫

4

3 回答 3

1

如果您使用管道模式(tbb::pipeline类或tbb::parallel_pipeline()函数),您可以使用有序过滤器来确保输出与接收到的输入的顺序完全相同。而且您在订购时不需要任何密码锁。

于 2011-05-24T11:37:51.827 回答
0

您的报价数据是否有时间戳或序列号
否则从生产者线程添加一个序列号并在解析后根据序列号对数据进行排序 - 然后可以在批处理中或在写入之前完成重新排序文件。

于 2012-01-20T09:12:48.987 回答
0

您可以创建一个输出结构(散列或列表),其中键是显示元素的位置(第一个、第二个、...),值是要显示的数据。然后当所有元素都准备好时,您可以按所需顺序输出结构。

这样你就不用关心哪个线程先完成了。

于 2012-01-20T10:34:50.797 回答