session_job_count.h 828 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #pragma once
  2. #include <library/cpp/deprecated/atomic/atomic.h>
  3. #include <util/system/condvar.h>
  4. #include <util/system/mutex.h>
  5. namespace NBus {
  6. namespace NPrivate {
  7. class TBusSessionJobCount {
  8. private:
  9. TAtomic JobCount;
  10. TMutex Mutex;
  11. TCondVar CondVar;
  12. public:
  13. TBusSessionJobCount();
  14. ~TBusSessionJobCount();
  15. void Add(unsigned delta) {
  16. AtomicAdd(JobCount, delta);
  17. }
  18. void Increment() {
  19. Add(1);
  20. }
  21. void Decrement() {
  22. if (AtomicDecrement(JobCount) == 0) {
  23. TGuard<TMutex> guard(Mutex);
  24. CondVar.BroadCast();
  25. }
  26. }
  27. void WaitForZero();
  28. };
  29. }
  30. }