Chinaunix首页 | 论坛 | 博客
  • 博客访问: 56618
  • 博文数量: 22
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-19 13:46
文章分类
文章存档

2015年(8)

2014年(14)

我的朋友

分类: LINUX

2014-12-30 14:33:59

 

内核同步机制

中断屏蔽、原子操作、自旋锁、信号量、互斥体、完成量completion

读写自旋锁、读写信号量、顺序锁

1、 自旋锁

Spinlock_t   xxx;

Spin_lock_init(&xxx)

Spin_lock(&xxx)

Spin_unlock(&xxx)

 

读写自旋锁

Rwlock_t  xxx;

Rwlock_init(&xxx)

Read_lock(&xxx)

Read_unlock(&xxx)

Write_lock(&xxx)

Write_unlock(&xxx)

注意:(1)锁占用时间很小的情况下使用;

     2)、避免死锁;

      3)、锁内,不能使用copy_from_user\copy_to_user\kmalloc\msleep等阻塞级\调度级的代码,因为发生内核抢占,抢占的进程 有可能又申请该锁,那么就变成死锁了。

2、 信号量

Struct semaphore  xxx;

Sema_init(&xxx,val)-àinit_ MUTEX (&xxx)init_ MUTEX_LOCKED (&xxx)

down(&xxx)

up(&xxx)

DECLEAR_MUTEX(xxx)

DECLEAR_MUTEX_LOCKED(xxx)

读写信号量

Struct  rw_semaphore  xxx

Init_rwsem(&xxx)

Down_read(&xxx)

up_read(&xxx)

Down_write(&xxx)

up_write(&xxx)

3、完成量completion

Struct  completion  xxx;

Init_completion(&xxx)

Wait_for_completion(&xxx)

complete(&xxx)

DECLEAR_COMPLETION(xxx)
 

4、 互斥体

Struct mutex xxx;

Mutex_init(&xxx)

Mutex_lock(&xxx)

Mutex_unlock(&xxx)

阅读(938) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~