我想有一個像tbb::task_group
東西,但與有序的執行保證的差異,例如爲了執行TBB?
serial_task_group tasks;
tasks.run([]{std::cout << 1;});
tasks.run([]{std::cout << 2;});
tasks.run([]{std::cout << 3;});
tasks.wait();
// guaranteed output: 123
有關如何使用tbb可以實現此目的的任何建議?
目前我有一個顯式的線程,只是使用條件變量從隊列執行。但是,使用隊列的問題是我如何去保證 只有一個任務在task_group中處於活動狀態。
我真的不能看到你想要實現什麼。如果我的理解正確,你只需要按順序執行任務,而且一次只執行一個任務。但在這種情況下,我沒有看到你需要'task_group'。如果你沒有併發執行,你可以直接在調用線程/函數中做任何你需要的事情,而不是委託給一個「任務」結構。關於你的問題的最後部分:如果你只有一個執行任務的線程,那麼一個任務會多活動一次? – Grizzly
@Grizzly:我有很多其他併發的東西在繼續。但是,我想在這裏運行的特定計算需要按順序運行,並且非常重。如果我使用顯式線程而不是使用任務調度程序,則由於超額訂閱,我有相當的開銷。我的目標是在任務調度器中運行一切。 – ronag
你看過tbb流程圖嗎?在windows上,代理程序庫很容易實現,在tbb流程圖中是最接近的等價物。 – Rick