美文网首页
读写锁CSpinRwLock

读写锁CSpinRwLock

作者: 星夜兼程工作笔记 | 来源:发表于2020-04-10 11:02 被阅读0次

    写者模型与生产者消费者模型大致一样,也满足3,2,1规则。

    3种关系:读者与读者(没有关系),写者与写者(竞争关系),读者与写着(互斥与同步关系)

    他们之间最大的区别是消费者会”取走”数据,而读者不会“取走‘数据。一般情况下,读者远远多于写者,所以,一般情况下,写者较读者优先权更高。

    有种情况是非常常见的,就是对于公共数据修改的机会比较少,相比较改写,他们读的机会反而更多。读写锁本质是一种自旋锁。

    class CSpinRwLock:no_copy

    {

           pthread_rwlock_t  rwl;

    public:

            CSpinRwLock() { pthread_rwlock_init(&rwl,NULL);}

           ~CSpinRwLock() {pthread_rwlock_destroy(&rwl);}

            void rLock() {pthread_rwlock_rdlock(&rwl);}

           void rUnLock() {pthread_rwlock_unlock(&rwl);}

          bool rtryLock(){return pthread_rwlock_tryrdlock(&rwl);}

          bool wtryLock(){return pthread_rwlock_trywrlock(&rwl);}

          void wLock() {pthread_rwlock_wrlock(&rwl);}

           void wUnLock() {pthread_rwlock_unlock(&rwl);}

    class scoped_rlock:no_copy

    {

          CSpinRwLock  &ftx;

         void operator=(const scoped_rlock&)(){}

    public:

         scoped_rlock(CSpinRwLock  & ft) : ftx(ft)   { ftx.rLock();}

          ~scoped_rlock() { ftx.rUnlock();}

    };

    class scoped_wlock:no_copy

    {

     CSpinRwLock  &ftx;

    void operator=(const scoped_wlock&)(){}

    public:

         scoped_wlock(CSpinRwLock  & ft) : ftx(ft)   { ftx.wLock();}

          ~scoped_wlock() { ftx.wUnlock();}

    };

    };

    相关文章

      网友评论

          本文标题:读写锁CSpinRwLock

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