Dla niektórych programów współbieżnych mogłem użyć koncepcji Javy CountDownLatch. Czy istnieje odpowiednik dla C++ 11, czy jak to się nazywa w C++?CountDownLatch odpowiednik
Chcę tylko wywołać funkcję, gdy licznik osiągnie zero.
Jeśli nie jest jeszcze chciałbym napisać sobie klasę jak następuje:
class countdown_function {
public:
countdown_function(size_t count);
countdown_function(const countdown_function&) = default;
countdown_function(countdown_function&&) = default;
countdown_function& operator=(const countdown_function&) = default;
countdown_function& operator=(countdown_function&&) = default;
// Callback to be invoked
countdown_function& operator=(std::function<void()> callback);
countdown_function& operator--();
private:
struct internal {
std::function<void()> _callback;
size_t _count;
// + some concurrent handling
};
// Make sure this class can be copied but still references
// same state
std::shared_ptr<internal> _state;
};
Czy coś podobnego już dostępne w dowolnym miejscu?
Scenariusz jest:
countdown_function counter(2);
counter = [success_callback]() {
success_callback();
};
startTask1Async([counter, somework]() {
somework();
--counter;
}, errorCallback);
startTask2Async([counter, otherwork]() {
otherwork();
--counter;
}, errorCallback);
Co to jest dokładnie w tym przypadku? – Xeo
Dodałem przykład użycia. – abergmeier
Więc zasadniczo chcesz wykonać wywołanie zwrotne po zakończeniu wszystkich zadań asynchronicznych? Jeśli tak, możesz bezpośrednio nadużyć deltera 'shared_ptr' i porzucić ręczne ubytki. – Xeo