api: "YAML JSON TOON Database"
version: "1.0.0"
format: "json"
dataset:
  id: 60
  slug: "concurrent-data-structures"
  title: "Concurrent Data Structures"
  description: "Thread-safe data structures: concurrent hash maps, skip lists, queues, stacks, read-write locks, lock-free algorithms, and compare-and-swap patterns."
  category: "Data Structures"
  category_slug: "data-structures"
  tags: "concurrency,lock-free,compare-and-swap,concurrent-hash-map,concurrent-queue,read-write-lock,atomic"
  view_count: 0
  created_at: 1778695229
  updated_at: 1778695229
data:
  structures:
    - name: "Concurrent Hash Map (Striped/Segmented)"
      type: "Lock-based"
      description: "Hash map with segmented locking: different buckets can be locked independently, allowing concurrent access to different segments"
      implementations:
        - "Java ConcurrentHashMap (striped, CAS-based)"
        - "C++ tbb::concurrent_unordered_map"
        - ".NET ConcurrentDictionary"
      contention: "Low (only on same segment)"
      notes: "Java 8+ uses CAS + synchronized on individual bins; read operations often lock-free"
    - name: "Concurrent Skip List"
      type: "Lock-free (optimistic)"
      description: "Probabilistic balanced search structure; uses CAS for lock-free insertion/deletion with high probability"
      implementations:
        - "Java ConcurrentSkipListMap/Set"
        - "C++ concurrent_skiplist"
      operations: "O(log n) expected for search/insert/delete"
      notes: "Better concurrency than balanced trees (no rebalancing); used as concurrent sorted map"
    - name: "Lock-Free Queue (Michael-Scott)"
      type: "Lock-free"
      description: "Linked-list queue using CAS on head and tail pointers; multiple producers/consumers without locks"
      implementations:
        - "Java ConcurrentLinkedQueue"
        - "C++ boost::lockfree::queue"
      operations: "O(1) amortized enqueue/dequeue"
      notes: "May have memory reclamation issues (ABA problem); use hazard pointers or epoch-based reclamation in production"
    - name: "Concurrent Stack (Treiber Stack)"
      type: "Lock-free"
      description: "Linked-list stack using CAS on top pointer; simple but can have contention on single atomic variable"
      implementations:
        - "C++ tbb::concurrent_bounded_queue (similar)"
        - "Java ConcurrentLinkedDeque"
      operations: "O(1) push/pop"
      notes: "High contention under heavy concurrent use; consider combining techniques or elimination backoff"
    - name: "Read-Write Lock"
      type: "Lock-based (shared/exclusive)"
      description: "Allows multiple concurrent readers OR one exclusive writer; optimizes read-heavy workloads"
      implementations:
        - "Java ReentrantReadWriteLock"
        - "C++ shared_mutex (C++17)"
        - "POSIX pthread_rwlock_t"
      operations: "Read: O(1), Write: O(1) + potential writer starvation"
      notes: "Risk of writer starvation under heavy read load; use StampedLock (Java) or upgradeable read locks"
    - name: "Compare-And-Swap (CAS)"
      type: "Atomic primitive"
      description: "Atomically: if (location == expected) location = new_value; return success/failure. Foundation of all lock-free algorithms"
      implementations:
        - "Java Unsafe.compareAndSwap*()"
        - "C++ std::atomic<T>::compare_exchange_weak/strong"
        - "x86 CMPXCHG instruction"
      operations: "O(1) atomic"
      notes: "CAS loop pattern: while (!CAS(loc, expected, new)) expected = *loc; ABA problem requires versioned pointers or hazard pointers"
    - name: "Hazard Pointers"
      type: "Memory reclamation"
      description: "Lock-free memory reclamation technique: threads announce which nodes they're accessing; nodes not in any hazard list can be safely freed"
      implementations:
        - "Boost.Lockfree"
        - "Folly (Facebook)"
        - "DPDK"
      operations: "O(1) publish/unpublish"
      notes: "Solves ABA and use-after-free in lock-free structures; bounded memory overhead (O(threads × hazard_slots))"
    - name: "Epoch-Based Reclamation"
      type: "Memory reclamation"
      description: "Threads announce their epoch; retired nodes are freed when all threads have moved past the epoch when node was retired"
      implementations:
        - "Seastar"
        - "Folly"
        - "RCU (Read-Copy-Update) in Linux kernel"
      operations: "O(1) enter/exit epoch"
      notes: "Lower overhead than hazard pointers for read-heavy workloads; used extensively in kernel RCU"
