操作系统锁机制-1

互斥锁
互斥锁加锁失败时,线程会释放CPU给其他线程。
互斥锁是一种独占锁,当线程A加锁成功后此时互斥锁已经被线程A独占了,其他的线程枷锁就会失败。当线程枷锁失败后内核会将线程设为阻塞状态,锁被释放后内核会在合适的时机唤醒线程。互斥锁加锁失败会产生开销,两个进程的上下文切换。
自旋锁
自旋锁加锁失败后线程会进入忙等,直到它拿到锁。自旋锁开销小一般不会产生线程上线文切换。需要注意的是如果是单核CPU需要抢占式调度器,因为忙等进程不会放弃CPU。
读写锁
只读取公共资源用读锁加锁,要修改公共资源用写锁加锁。
当读锁被线程持有时,多个线程能够并发地持有读锁,但是当写锁被线程持有后读进程获取读锁会被阻塞,其他写进程获取写锁也会被阻塞。
悲观锁和乐观锁
上述锁都是悲观锁,悲观锁认为修改资源的概率高容易出现冲突,所以在访问资源前先上锁。
乐观锁比较乐观,认为多线程同时修改进程发生冲突概率较低。工作方式是先修改资源,再验证这段时间有没有冲突,如果没有其他进程修改资源操作完成,否则放弃本次操作。所以也叫无锁编程。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值