Per alcuni programmi concorrenti, è possibile utilizzare il concetto Java CountDownLatch. Esiste un equivalente per C++ 11 o quale sarebbe il concetto chiamato in C++?CountDownLatch Equivalente
Quello che voglio è richiamare una funzione una volta che il conteggio ha raggiunto lo zero.
Se c'è non ancora vorrei scrivere io stesso una classe come la seguente:
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;
};
è qualcosa di simile già disponibili da qualche parte?
Scenario è:
countdown_function counter(2);
counter = [success_callback]() {
success_callback();
};
startTask1Async([counter, somework]() {
somework();
--counter;
}, errorCallback);
startTask2Async([counter, otherwork]() {
otherwork();
--counter;
}, errorCallback);
Qual è esattamente l'uso per questo? – Xeo
Ho aggiunto un esempio di utilizzo. – abergmeier
Quindi, fondamentalmente, vuoi eseguire una richiamata quando tutte le attività asincrone sono state completate? In caso affermativo, si può semplicemente abusare direttamente deleter di 'shared_ptr' e abbandonare il decremento manuale. – Xeo