C ++ / Windows多线程同步/数据共享

时间:2014-07-10 12:13:41

标签: c++ windows multithreading synchronization

我的要求是单个数据帧将由两个并行方法处理(它们需要并行,因为它们对计算要求很高)。

根据任一线程的结果,另一个需要停止。 也就是说,如果方法1首先返回TRUE,则应停止方法2。 如果方法1首先返回FALSE,则不应停止方法2。

同样,如果方法2首先返回TRUE,则应停止方法1。 如果方法2首先返回FALSE,则不应停止方法1。

请注意,方法1和方法2是库调用(黑盒子),我无权访问其内部。我所知道的是,它们的计算量很大。 如何在C ++ / Windows中实现它?有什么建议?

2 个答案:

答案 0 :(得分:1)

看一下并发运行时 特别是任务命名空间(http://msdn.microsoft.com/en-us/library/dd492427.aspx)和 when_any 功能(http://msdn.microsoft.com/en-us/library/hh749973.aspx)。
concurrency :: when_any 将创建一个任务,在任何输入任务完成时完成。

答案 1 :(得分:0)

无论您使用plain Windows threadsstd::threadTask Parallelism,还是您喜欢的任何图书馆,根据您提供的详细信息,您仍然无法达到您想要的效果在你的问题中。

虽然您可以确定第一个线程/任务何时完成(例如@ j-w'答案),但您无法在不告诉您的&#的情况下真正停止其他任务 34;黑盒库功能"停止(除非它提供明确提前取消的方法)。你没有说明黑盒功能可以告诉中途取消,所以我假设它不是。

你不能简单地杀死线程/任务,因为这会造成资源泄漏,甚至可能产生其他令人讨厌的东西,例如dealocks等,这取决于你的blackbox功能。

所以,你可以使用类似when_any或其他同步/信令原语的东西,让其他线程/任务继续运行,即使你不需要结果,&#34 ;未黑箱"你的图书馆功能和添加取消支持,或完全忘记它。