2013-03-30 2 views
6

Для некоторых параллельных программ я мог бы использовать концепцию 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); 
+0

Что именно используется для этого? – Xeo

+0

Я добавил пример использования. – abergmeier

+1

Итак, вы в основном хотите выполнить обратный вызов, когда все асинхронные задачи завершены? Если да, вы можете просто злоупотреблять дефолтом 'shared_ptr' и ручным декрементом. – Xeo

ответ

2

Существует proposal покрытие это для стандарта на следующий C++. Реализация доступна как часть google concurrency library.

+0

Хотя 'gcl :: countdown_latch 'на самом деле не то, что я ищу (так как это вариант блокировки), я думаю, что вы ответили на главный вопрос лучше. И я бы очень хотел заменить 'countDown' на' --', но это только я. – abergmeier

Смежные вопросы