2014-07-10 62 views
0

我的要求是,一個數據幀將由兩種方法並行處理(它們需要並行,因爲它們對計算要求很高)。C++/Windows多線程同步/數據共享

根據任一線程的結果,其他需要停止。 也就是說,如果方法1首先返回TRUE,則應停止方法2。 如果方法1首先返回FALSE,則不應停止方法2。

同樣,如果方法2首先返回TRUE,則應停止方法1。 如果方法2首先返回FALSE,則不應停止方法1。

請注意,方法1和方法2是庫調用(黑盒),我沒有訪問其內部。我所知道的是,它們是計算密集型的。我如何在C++/Windows中實現它?有什麼建議麼?

回答

0

無論您使用的是plain Windows threadsstd::thread,Task Parallelism或您喜歡的任何圖書館,您仍然無法根據您提供的問題獲得所需的信息。當你第一個線程/任務完成的時候(例如@jw的回答),你不能真正停止另一個任務而不告訴你的「黑匣子庫函數」停止(除非它爲明確提前取消提供了一種方法)。你沒有指出黑盒功能可以被告知在中途取消,所以我假設它不是。

你不能簡單地殺死線程/任務,因爲這會造成資源泄漏,甚至可能還有其他討厭的東西,如dealocks等,這取決於你的黑盒子功能的作用。

所以,你可以使用類似when_any或其他同步/信號原語的東西,並讓其他線程/任務繼續運行,即使你不需要結果,「un-blackbox」庫函數並添加取消支持,或完全忘記它。