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

C++/Windows Multi threaded synchronization/Data Sharing

本文关键字:数据共享 同步 Windows c++ 多线程      更新时间:2023-10-16

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

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

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

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

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

无论你使用普通的Windows线程,std::thread,任务并行,或任何你喜欢的库,你仍然不会实现你想要的细节,你在你的问题。

虽然你可以确定第一个线程/任务何时完成(例如@j-w的答案),但如果不告诉你的"黑盒库函数"停止,你就不能真正优雅地停止其他任务(除非它提供了一种显式提前取消的方法)。你没有说明黑盒功能可以被告知中途取消,所以我认为它不是。

你不能简单地杀死线程/任务,因为这会造成资源泄漏,甚至可能造成其他讨厌的东西,如释放锁等,这取决于你的blackbox函数做什么。

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