latch


1. Atomic Latch

std::atomic<bool> latch;

void wait_for_latch() {
  while (!latch.load(std::memory_order_acquire)) {
    std::this_thread::yield();
  }
}

void release_latch() {
  latch.store(true, std::memory_order_release);
}

2. Condition Variable Latch

std::condition_variable latch_cv;
std::mutex latch_mtx;

void wait_for_latch() {
  std::unique_lock<std::mutex> lock(latch_mtx);
  latch_cv.wait(lock);
}

void release_latch() {
  std::unique_lock<std::mutex> lock(latch_mtx);
  latch_cv.notify_all();
}

3. Event Latch

4. Semaphore Latch

5. Mutex Latch

6. Spin Lock Latch

7. Counting Latch

8. Cyclic Latch

9. Barrier Latch

10. Multi-Phase Latch

11. Asynchronous Latch

12. Explicit Coroutine Latch

13. Implicit Coroutine Latch

14. Semaphore Acquisition Latch

15. Mutex Acquisition Latch

16. Spin Lock Acquisition Latch

17. Counting Semaphore Acquisition Latch

18. Condition Variable Wait Latch

19. Event Wait Latch

20. Semaphore Wait Latch

21. Mutex Wait Latch

22. Spin Lock Wait Latch

23. Counting Latch Wait Latch

24. Cyclic Latch Wait Latch

25. Barrier Latch Wait Latch

26. Multi-Phase Latch Wait Latch

27. Asynchronous Latch Wait Latch

28. Explicit Coroutine Latch Wait Latch

29. Implicit Coroutine Latch Wait Latch

30. Semaphore Acquisition Latch Wait Latch