我在想,如果下面的代碼是安全的使用,如果沒有,是否有可能使其安全?移動會不會跟蹤參考?
{
ThreadState state = ThreadState::Running;
auto pair = std::make_pair(std::async([&state]()
{
state = ThreadState::Waiting;
}), std::move(state));
someVector.emplace(std::move(pair));
}
執行std::move
之後,lambda會記錄正確的參考嗎?國家的壽命會延長嗎?我可以改進它來創建一對lambda及其捕獲狀態嗎?
這些是枚舉?你想做什麼?也許有更好的辦法? – Nim
@Nim這是我正在做的一個最簡單的例子。有沒有更好的辦法? https://pastebin.com/embed_js/9DKguWeK –
這看起來不正確,例如,如果在進行測試時沒有任何異步任務在內部循環中完成,那麼外部循環會再次運行,並且計劃更多任務 - 理論上你可以有比你需要的批量大小更多的任務。在啓動任務的內部循環下面,你應該等待所有的任務完成。這保證了最多隻能運行你的線程數需要.. – Nim