Для некоторых параллельных программ я мог бы использовать концепцию Java CountDownLatch. Есть ли эквивалент для C++ 11 или что бы эта концепция вызывается в C++?CountDownLatch эквивалент
Я хочу, чтобы вызвать функцию после того, как счет достигнет нуля.
Если есть не все же я хотел бы написать себе класс, как следующее:
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;
};
ли что-то подобное уже доступны в любом месте?
Сценарий:
countdown_function counter(2);
counter = [success_callback]() {
success_callback();
};
startTask1Async([counter, somework]() {
somework();
--counter;
}, errorCallback);
startTask2Async([counter, otherwork]() {
otherwork();
--counter;
}, errorCallback);
Что именно используется для этого? – Xeo
Я добавил пример использования. – abergmeier
Итак, вы в основном хотите выполнить обратный вызов, когда все асинхронные задачи завершены? Если да, вы можете просто злоупотреблять дефолтом 'shared_ptr' и ручным декрементом. – Xeo