内核同步机制

1,Semaphores
跟应用程序的信号量用法差不多,一般把value初始化为1,当做mutex用。sema_init(&sem, 1);
在执行等待时(down),如果value<1, 线程将阻塞。因此semaphores不能用在禁止sleep的环境,比如中断处理。
普通semaphores只允许一个线程进入临界区,而Reader/Writer Semaphores运行多个读线程进入,但只有一个写线程可以进入

2,Completions
Completions与semaphores作用差不多,都可以实现同步的功能。不同的环境,两者的效率不同:
semaphores适用这样的情况:临界资源经常是有效的,即value值大于0,所以down操作不需要阻塞,能立刻获得资源;
completions适用这样的情况:临界资源经常是被占用的,执行wait_for_completion时需要阻塞等待其他线程释放资源。

3, spinlocks
与semaphores相比,spinlocks可以用在禁止sleep的环境,比如中断处理;
执行spin_lock时不能被中断
内核获取spinlock后将禁止内核抢占相应处理器
获取spinlock的临界区要注意一下几点:
处理尽可能简短,也不要执行睡眠等所有会放弃cpu资源的操作(中断处理除外),以防其他处理器长时间自旋等待这个被占用的锁
获取spinlock后,禁止相应cpu的中断可以预防死锁

Reader/Writer Spinlocks

ps:
提供给外部的接口,必须明确的占用和释放锁;
内部接口可以假设调用者会进行上锁。但最好留下注释备忘。

转载于:https://www.cnblogs.com/datetree/archive/2013/05/02/3054941.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值