读写自旋锁

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

读写自旋锁

1:什么是自旋锁?

自旋锁就是互斥的同步原语,试图进入临界区的线程只用忙等的方式检测锁的状态。如果检测到锁未被持有,则进入临界区。因为采用忙等的方式,所以自旋锁必须是锁住很小的一块儿代码,并且很短的时间片。

2:读写自旋锁?

有些线程在临界区内只是简单的读取一些信息,不会涉及到信息的修改,允许读取信息的线程进入临界区不会有危险,同时还可以提高性能。所以将这些线程区分为读线程和写线程,从而就有了读写自旋锁。

3:如何使用?

临界区里面保护的共享资源有可能是一个单一变量,也可能是多个变量或者一个复杂结构的文件。所以每个共享的资源对应一把读写自旋锁。线程只允许采用如下方式来访问自旋锁。

1>申请锁

2>获得锁之后,读写共享资源

3>释放锁

4:自旋锁满足四个属性

1>互斥:任何时刻读者写者不能同时进入临界区。任意时刻只能至多一个写者进入临界区

2>读者并发:满足互斥的前提下,多个读者可以同时进入临界区

3>无死锁

4>忙等:读写锁只用于很小的代码片段,线程等待期间不可以进入睡眠状态,因为睡眠/唤醒非常的耗时,大大延迟了获得锁的时间。

5:读者与写着竞争获得锁的时候,有一定的偏好策略

(1)读者优先:

如果锁被读者拥有,则优先偏好读者进入临界区

(2)写者优先:

写者在后到的读者/写者之前抢到锁

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航