CountDownLatch equivalent
c++, c++11, java
Solution
There is a proposal covering this for the next C++ standard. An implementation is available as part of the google concurrency library.
Problem
For some concurrent programming I could use the Java's CountDownLatch concept. Is there an equivalent for C++11 or what would that concept be called in C++? What I want is to invoke a function once count has reached zero. If there is non yet I would write myself a class like the following: ``` 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; }; ``` Is something similar already available anywhere? Scenario is: ``` countdown_function counter( 2 ); counter = [success_callback]() { success_callback(); }; startTask1Async( [counter, somework]() { somework(); --counter; }, errorCallback ); startTask2Async( [counter, otherwork]() { otherwork(); --counter; }, errorCallback ); ```