C#多线程-线程锁

C#多线程-线程锁

1.无锁算法

2.自旋锁

  • 基于原子操作实现 0表示未获取 1表示已被获取
  • 线程饥饿: 多个线程同步访问线程资源,可能一直获取不到锁
  • 排队自旋锁: 不会使线程状态发生切换,不会使线程进入阻塞状态,减少了不需要的上下文切换
  • SpinLock
  • SpinWait
  • SleepEx 切换到任意逻辑核心关联的待运行队列中的线程
  • 自旋锁不适用于长时间运行的操作

3.互斥锁

  • 基于原子操作和线程调度 0表示未获取 1表示已被获取
  • 失败不重试,进入等待队列 线程进入等待状态 等待唤醒
  • Mutex
    • WaitOne等待锁
    • ReleaseMutex 释放锁
    • Dispose 销毁锁
  • pthread POSIX线程标准的类库
    • 支持重入 递归锁

混合锁

获取锁失败后,重试一定的次数 失败超过一定的次数 进入等待状态 更通用 性能更好

  • Monitor
    • Enter
    • Exit
  • 线程锁:信号量 (数值记录可用的数量) = 线程同步对象
  • 自习室中的座位
  • 互斥锁L:某个座位是否被占用
  • 信号量:整个自习室中未被占用的作为数量
  • 信号量常用于实现生产消费模式
  • 读写锁(读取锁、写入锁) = 混合锁 频繁读取并且读取需要一定时间的场景
    • 多线程写入同一个文件

异步操作

表示执行某项操作后不等待操作结束,但可以在操作结束后收到通知

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值