/myds-concurrency

基于C++的线程安全的容器实现。

Primary LanguageC++MIT LicenseMIT

myds-concurrency

本项目的最新更新以及补充内容已经迁移至:https://github.com/Happyxianyueveryday/vessel-concurrency ,敬请移步至该链接。

基于C++的相对线程安全的典型容器实现。

附注:cpp的stl本身大多数容器不支持并发,本项目是根据其他项目时的需求设计的,从零开始构造的线程安全容器,包含支持并发的一些典型容器。其中部分在设计原理上参照了java.util.concurrent并发容器库的实现,部分则是自己根据实际需求设计的新容器(例如ConcurrentLinkedSet),并且在锁的粒度以及一致性上提供了多种选择。

目录

root/ 
  // 1. 锁与信号量
  SpinLock/ -- 自旋锁 √
    SpinLock -- 非公平自旋锁 √
    TicketSpinLock -- 公平自旋锁(返回排队号) √
    TicketLocalSpinLock -- 公平自旋锁(thread_local版本,不返回排队号)√
    MCSLock -- 公平自旋锁
    ReentrantSpinLock -- 可重入自旋锁
    
  ReadWriteMutex/ -- 读写锁 √
    rwmutex -- 读优先的读写锁 √
    wrmutex -- 写优先的读写锁 √
    fair_rwmutex -- 读写公平的读写锁 √
  Semaphore -- 信号量
    
  // 2. 线程安全容器部分
  Stack/ -- 栈
    ConcurrentArrayStack -- 数组栈(互斥锁或三种策略的读写锁)√
    ConcurrentLinkedStack -- 链表栈(互斥锁或三种策略的读写锁)√
  Queue/ --队列
    ConcurrentArrayQueue -- 环形数组单向队列(互斥锁或三种策略的读写锁)√
    ConcurrentLinkedQueue -- 链表单向队列(互斥锁或三种策略的读写锁)√
  BlockingStack/ -- 阻塞栈
    ConcurrentBlockingStack -- 链表阻塞栈 (条件变量,可重入锁)√
  BlockingQueue/ -- 阻塞队列
    LinkedBlockingQueue -- 链表阻塞队列(条件变量,可重入锁)√
    ArrayBlockingQueue -- 环形数组阻塞队列 √ 
    LockFreeRingBuffer -- 无锁并发环形缓冲区 
  Vector/ -- 数组
    CopyOnWriteArrayList -- 写时复制数组容器(可重入锁)√
  Set/ -- 集合
    ConcurrentLinkedSet -- 基于链表的集合(交替锁)√
  HashSet/ -- 哈希集合
    ConcurrentStrongHashSet -- 强一致性哈希集合(分段锁+互斥锁) √
    ConcurrentWeakHashSet -- 弱一致性哈希集合(分段锁+无锁读,或分段锁+读写锁)√