内核同步方法之读写自旋锁

 

   当对某个数据结构的操作可以像这样被划分为读/写两种类别时,类似读/写锁这样的机制就很有用了。Linux的读写自旋锁为读和写分别提供了不同的锁,一个或多个读任务可以并发的持有读者锁;用于写的锁最多只能被一个写任务持有,而且此时不能有并发的读操作。有时候读写锁叫做共享排斥锁,或者并发排斥锁,因为这种锁以共享(对读者而言)和排斥(对写着而言)的形式获得使用。

  1. /*
  2.  * Read-write spinlocks, allowing multiple readers
  3.  * but only one writer.
  4. */
  1. 在<Spinlock_types.h(include/linux)>中
  2. typedef struct {
  3.     raw_rwlock_t raw_lock;
  4. #if defined(CONFIG_PREEMPT) && defined(CONFIG_SMP)
  5.     unsigned int break_lock;
  6. #endif
  7. #ifdef CONFIG_DEBUG_SPINLOCK
  8.     unsigned int magic, owner_cpu;
  9.     void *owner;
  10. #endif
  11. #ifdef CONFIG_DEBUG_LOCK_ALLOC
  12.     struct lockdep_map dep_map;
  13. #endif
  14. } rwlock_t;

 

  1. 在<Spinlock.h(include/linux)>
  2. #define write_lock(lock)        _write_lock(lock)
  3. #define read_lock(lock)         _read_lock(lock)
  4. 在<Spinlock_api_up.>
  5. #define _read_lock(lock)            __LOCK(lock)
  6. #define _write_lock(lock)           __LOCK(lock)
  7. 在<hSpinlock.c(kernel)>
  8. void __lockfunc _write_lock(rwlock_t *lock)
  9. {
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值