【问题标题】:C++/Windows Multi threaded synchronization/Data SharingC++/Windows 多线程同步/数据共享
【发布时间】:2014-07-10 12:13:40
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ windows multithreading synchronization


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      无论您使用plain Windows threadsstd::threadTask Parallelism 还是您喜欢的任何库,鉴于您在问题中提供的详细信息,您仍然无法实现您想要的。

      虽然您当然可以确定第一个线程/任务何时完成(例如 @j-w 的回答),但如果不告诉您的“黑盒库函数”,您就无法真正停止另一个任务优雅停止(除非它提供了显式提前取消的方法)。您没有指出可以告诉黑盒功能中途取消,所以我假设它不是。

      您不能简单地终止线程/任务,因为这会造成资源泄漏,甚至可能造成其他令人讨厌的东西,例如解除锁定等,具体取决于您的黑盒函数的作用。

      因此,您可以使用 when_any 或其他同步/信号原语之类的东西,即使您不需要结果,也可以让其他线程/任务继续运行,“取消黑盒”您的库函数并添加取消支持,或者完全忘记它。

      【讨论】:

        猜你喜欢
        • 2012-06-28
        • 1970-01-01
        • 2010-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多