linux 顺序锁

读读不阻塞,

读写不阻簺,

写写阻塞,

 

两个字段

1. spinlock_t 字段, 阻塞写

2. sequence字段,写修改, 读检查, 值等不等或者是否偶数, 不等或不为偶,重读

 

 

相等且旧值为偶数:无写者

相等但旧值为奇数:写者正在写时读取sequence值,且还在写

不等且旧值为偶数,新值为奇数:在写者之前,开始读, 但现在已经在写了

不等且旧值为偶数, 新值为偶数:在写者之前,开始读, 但现在写者也已经完成了

不等且旧值为奇数,新值为奇数:不会出现的case, 这种应该是相等

不等且旧值为奇数, 新值为偶数:在写者开始之后,开始读, 但现在写者也已经完成了

 

 

写获取锁:write_seqlock:  sequence加1

写释放锁:write_sequnlock: sequence再加1

 

读的结构:

unsigned int seq;

do {

    seq = read_seqbegin(&seqlock);

    /*  临界区   */

}while (read_seqretry(&seqlock, seq))

 

要求:

不适合指针

读者临界区代码没有副作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值