linux kernel 实现同步

有以下几种方法可以实现linux kernel中多线程间的同步

1.禁用抢占模式,在一个线程进入关键区域前,禁止抢占模式,在出关键区域后,再启用该模式。只对单处理器系统。

2.禁用中断,在一个线程进入关键区域前,禁用所有设备的中断信号。在出关键区域后,再启用设备的中断信号。只对单处理器。

3.信号(Semaphores),对单处理器和多处理器均有效。对每个资源维护一个信号,每一信号有3部分组成

1.一个整数值(初始值1)

2.一个等待队列

3.两个原子操作 down( )和up( )

对于每一个要访问某个资源的进程来说,执行down操作(减),如果整数值小于0,则把进程放入信号的等待队列。如果>=0,则该线程获得该资源的访问权限。如果执行up操作(加)后整数值>=0,则从等待队列中取出一个或多个线程来访问在资源。

4.自旋锁(Spin locks)只对多处理器有效。

由于信号需要维护一个等待队列,所以对于访问关键区域时间较少的情况下,效率较低。而自旋锁可以有效的解决该问题。

要访问关键区域前,必须获得该关键区域的唯一锁,如果没有获得唯一锁,在一直周期性的检查唯一锁是否已被释放,直到获得唯一锁。

如果在单处理器的情况下,一旦发现没有获得唯一锁,则会陷入周期性的检查中。而由于cpu一直被占用,则没有机会去执行释放的操作。

 

如果有大量的同步操作,则有可能会发生死锁。而对于没有顺序的申请资源,保证其不发生死锁是比较困难的。所以,linux系统规定申请资源要按照预定的顺序来操作。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值