加载中...
互斥锁与信号量是并发编程中控制共享资源访问的两种基础同步原语。互斥锁保证同一时刻只有一个线程进入临界区,信号量则通过计数允许有限数量的执行单元同时访问资源。

| 领域 | 并发、操作系统 |
| 互斥锁特点 | 独占、有所有权 |
| 信号量提出者 | 迪杰斯特拉 |
| 信号量类型 | 二元、计数 |
| 用途 | 保护临界区、限流 |
互斥锁与信号量(Mutex and Semaphore)是并发编程中最基础的两种同步原语,用于协调多个执行单元对共享资源的访问,避免竞态条件,保证数据一致性。
在多线程或多进程环境下,若不加约束地访问共享资源,就可能产生错误。互斥锁提供互斥访问:任一时刻至多一个执行单元能持有锁并进入被保护的临界区,其余必须等待。信号量则是一个带计数的同步工具,由荷兰计算机科学家迪杰斯特拉提出,它维护一个许可数量,获取时计数减一、释放时加一,当计数为零时请求者阻塞,可用于限制并发访问的数量或实现执行单元间的信号通知。
互斥锁用于保护计数器、共享数据结构、文件写入等临界区。信号量常用于限制数据库连接池、线程池的并发上限,或作为生产者消费者问题中协调缓冲区空位与数据项的信号。许多高层同步工具(如读写锁、条件变量)也建立在这两种原语之上。
问:互斥锁和二元信号量有什么区别?答:互斥锁通常带所有权语义,应由加锁者解锁;二元信号量不关心谁释放,更适合做信号通知,而非单纯保护临界区。
问:滥用锁会有什么风险?答:锁的粒度过大会降低并发性能,加锁顺序不当会导致死锁,忘记释放会造成资源永久占用,因此应尽量缩小临界区并谨慎设计加锁策略。

| 领域 | 并发、操作系统 |
| 互斥锁特点 | 独占、有所有权 |
| 信号量提出者 | 迪杰斯特拉 |
| 信号量类型 | 二元、计数 |
| 用途 | 保护临界区、限流 |
登录 后参与讨论
暂无讨论,来发表第一条评论吧