hazard_pointer


1. Single Element Stack

class Stack {
  hazard_pointer<int> ptr;

public:
  void push(int value) {
    int* old;
    while (!(old = ptr.get())) {}
    ptr.put(new int(value), old);
  }

  int pop() {
    int* old;
    int* res;
    while (!(old = ptr.get())) {}
    while (!(res = ptr.get_and_clear(old))) {}
    return *res;
  }

  bool empty() {
    return ptr.get() == nullptr;
  }
};

2. Lock-Free Queue

3. Lock-Free Linked List

4. Lock-Free Reference Counting

5. Lock-Free Thread Local Storage

6. Lock-Free Concurrent Map

7. Lock-Free Skip List

8. Lock-Free Binary Search Tree