首页 > 其他 > 详细

基于ticket的rw锁

时间:2016-08-17 13:51:39      阅读:233      评论:0      收藏:0      [点我收藏+]

代码: wiredtiger-2.8.0/src/os_posix/os_mtx_rw.c

rw锁结构

struct {
    uint16_t writers;     // Now serving for writers
    uint16_t readers;     // Now serving for readers
    uint16_t users;        // Next available ticket number
    uint16_t __notused;    // Padding
} lock

要加锁, 先领号. 即 (读lock.users, lock.users++), 原子操作.

 

当领的号 与 当前 服务的 lock.writers 同, 则申请 w锁成功; 与当前 服务的 lock.readers 同, 则申请 r锁成功

 

得到读锁, lock.readers++; 释放读锁, lock.writers++;

释放写锁, lock.readers++; lock.writers++; 

 

这么想: read锁是共享的, 所以在得到read锁时, 就可以叫 下一个reader的号了;  释放read锁才能叫 下一个 writer的号;

write锁 是排他的, 所以只有在释放write锁, 才能叫 下一个reader, writer号

 

基于ticket的rw锁

原文:http://www.cnblogs.com/brayden/p/5393742.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!