semaphore


1. Resource Limiter

class Semaphore {
  int count;

public:
  Semaphore(int initial_count) : count(initial_count) {}

  void acquire() {
    std::unique_lock<std::mutex> lock(mutex);
    while (count == 0) {
      cv.wait(lock);
    }
    --count;
  }

  void release() {
    std::unique_lock<std::mutex> lock(mutex);
    ++count;
    cv.notify_one();
  }

private:
  std::mutex mutex;
  std::condition_variable cv;
};

class ResourcePool {
public:
  ResourcePool(int max_resources) : semaphore(max_resources) {}

  Resource acquire_resource() {
    semaphore.acquire();
    return Resource();
  }

  void release_resource(Resource resource) {
    semaphore.release();
  }

private:
  Semaphore semaphore;
};

2. Mutual Exclusion

3. Producer-Consumer Problem

4. Readers-Writers Problem

5. Counting Semaphore

6. Binary Semaphore

7. Non-Blocking Semaphore

8. Timeout Semaphore

9. Reentrant Semaphore

10. Spinlock

11. Fair Mutex

12. Ticket Lock

13. CLH Lock

14. MCS Lock

15. TSL Lock

16. Dekker's Algorithm

17. Peterson's Algorithm

18. Lamport's Bakery Algorithm

19. Adaptive Mutex