c++ /Windows多线程同步/数据共享
C++/Windows Multi threaded synchronization/Data Sharing
我的要求是单帧数据由两个方法并行处理(它们需要并行,因为它们对计算的要求很高)。
根据任意一个线程的结果,需要停止另一个线程。也就是说,如果方法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
或其他同步/信令原语,即使您不需要结果,也可以让其他线程/任务继续运行,"取消黑盒"您的库函数并添加取消支持,或者完全忘记它。
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 线程之间的实时数据共享
- 共享 C++ 的数据成员指针
- DLL共享数据的推荐方式是什么
- 两个单独的类不共享相同的数据 C++
- 如何在进程之间共享大量数据而不重复?(国际刑罚委员会)
- 如何在共享库的整个生命周期内存储数据
- 简单使用 std::atomic 在两个线程之间共享数据
- 初始化可变数据结构中的共享指针向量
- C++实现相同接口的对象/类之间的数据共享
- 线程之间类的静态数据共享
- OpenMP中类成员变量的数据共享属性
- 多个文件数据共享
- GL顶点数据的QThread数据共享方法
- c++ /Windows多线程同步/数据共享
- bhoc++标签之间的数据共享
- 我如何保持我的QAbstractTableModel与我的数据存储同步