美文网首页
Ceph读写锁实现

Ceph读写锁实现

作者: phenom | 来源:发表于2016-12-09 11:10 被阅读0次

src/common/RWLock.h

RWLock使用了C++11新特性Deleted函数,禁用其拷贝构造函数与赋值操作符。

public:
  RWLock(const RWLock& other) = delete;
  const RWLock& operator=(const RWLock& other) = delete;

使用两个原子变量对读和写锁进行计数:

  mutable atomic_t nrlock, nwlock;

为了防止写进程被饿死,可使用PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP对读写锁进行初始化:

#if defined(PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP)
    if (prioritize_write) {
      pthread_rwlockattr_t attr;
      pthread_rwlockattr_init(&attr);
      // PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP
      //   Setting the lock kind to this avoids writer starvation as long as
      //   long as any read locking is not done in a recursive fashion.
      pthread_rwlockattr_setkind_np(&attr,
          PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP);
      pthread_rwlock_init(&L, &attr);
    } else
#endif

http://stackoverflow.com/questions/2190090/how-to-prevent-writer-starvation-in-a-read-write-lock-in-pthreads

相关文章

  • Ceph读写锁实现

    src/common/RWLock.h RWLock使用了C++11新特性Deleted函数,禁用其拷贝构造函数与...

  • 读写锁实现

    读写锁 ReentrantReadWriteLock可重入读写锁(实现ReadWriteLock接口) 使用:Re...

  • Java并发编程-读写锁(ReentrantReadWriteL

    章节目录 ReentrantReadWriteLock 特性 读写锁接口示例 读写锁的实现分析读写状态设计写锁的释...

  • block分析(上)

    读写锁的补充 实现读写锁的两种方案 对底层pthread进行封装 GCD封装 读写锁要实现的功能 多读单写,多读就...

  • Java - ReentrantReadWriteLock的读写

    ReentrantReadWriteLock是可重入读写锁,底层依赖AQS实现,读写锁的竞争通过state的高位和...

  • 17.读写锁ReentrantWriteReadLock

    读写锁ReentrantWriteReadLock,基于AQS的锁机制,实现ReadWriteLock接口。内部有...

  • java锁(7)改进读写锁StampedLock详解

    1、StampedLock特性 StampedLock是JDK 8新增的读写锁,跟读写锁不同,它并不是由AQS实现...

  • 锁2

    5、读写锁 相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些。假设你的程序中涉及到...

  • RWMutex

    前面分析了互斥锁,在针对写少读多的场景,更好的选择是使用读写锁。实现读写锁主要解决下列的问题: 写锁需要阻塞写锁:...

  • 读写锁

    读写锁在 Java 的实现是 ReentrantReadWriteLock,称为可重入读写锁。其与 Reentra...

网友评论

      本文标题:Ceph读写锁实现

      本文链接:https://www.haomeiwen.com/subject/mpyemttx.html