码迷,mamicode.com
首页 > 其他好文 > 详细

基于ticket的rw锁

时间:2016-08-17 13:51:40      阅读:344      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!