• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2025-03-10 23:39 Aet 隐藏边栏 |   抢沙发  5 
文章评分 2 次,平均分 5.0

用户模式同步

Interlocked 系列函数

  1. 原理
    1. 通过 CPU 原子指令(如 LOCK XCHG)直接操作内存,无需进入内核态
  2. 场景
    1. 简单计数器(如引用计数)
    2. 无锁数据结构(如无锁队列)
  3. 特点
    1. 性能极高(无内核切换)
    2. 仅支持单个变量的原子操作,无法实现复杂同步

临界区(Critical Section)

  1. 原理
    1. 进程内轻量级互斥锁,通过自旋(Spin)减少内核切换
  2. 场景
    1. 同一进程内多线程对共享资源的互斥访问
    2. 高频、短时间持有的锁
  3. 限制
    1. 不能跨进程使用
    2. 不支持超时等待
  4. API

  1. 高级选项

内核对象同步(Kernel-Mode Synchronization)

信号量(Semaphore)

  1. 原理
    1. 内核对象,维护一个计数器,控制同时访问资源的线程数
  2. 场景
    1. 限制资源并发访问数(如数据库连接池)
    2. 跨进程资源池管理
  3. 特点
    1. 计数器范围:0 到创建时指定的最大值
  4. API

互斥量(Mutex)

  1. 原理
    1. 内核对象,支持跨进程互斥访问,所有权机制(仅持有者能释放)
  2. 场景
    1. 跨进程资源保护(如共享内存、文件)
    2. 需要严格所有权的场景
  3. 特点
    1. 可跨进程:通过命名互斥量(如 Global\\ 前缀)实现
    2. 递归获取:同一线程可多次加锁(需对应次数释放)
  4. API

事件(Event)

  1. 原理
    1. 内核对象,用于线程间通知(手动重置/自动重置)
  2. 场景
    1. 线程间单向通知(如生产者-消费者模型)
    2. 复杂同步逻辑(如多条件等待)
  3. 对比
    1. 手动重置:广播唤醒所有等待线程
    2. 自动重置:每次触发仅唤醒一个线程
  4. API

可等待计时器(Waitable Timer)

  1. 原理
    1. 内核对象,用于线程在指定时间或周期被唤醒
  2. API

读写锁(Slim Reader-Writer Lock)

  1. 原理
    1. 允许多个读线程或单个写线程访问资源,优化读多写少场景
  2. 优点
    1. 用户模式实现,性能接近临界区
    2. 无递归支持,需避免重复加锁
  3. 场景
    1. 高频读取、低频写入的数据结构(如配置缓存)
  4. API

条件变量(Condition Variable)

  1. 原理
    1. 与临界区或读写锁配合,实现线程等待特定条件成立
  2. 场景
    1. 生产者-消费者模型(当队列空/满时阻塞)
    2. 复杂状态依赖的同步逻辑
  3. API

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2025-03-18
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享