并发系统中的关键概念:临界区、锁、死锁与原子操作
1. 共享资源处理与原子操作
在并行和分布式应用中,处理共享资源需要特别小心。以金融应用为例,共享资源可能是用户账户。一个代表交易运行的线程首先访问用户账户读取当前余额,然后更新余额,最后写回新余额。如果该线程被中断,而另一个操作同一账户的线程在第一个线程完成这三个步骤之前继续执行,金融交易的结果就会出错。
另一个挑战是处理涉及从一个账户转移到另一个账户的交易。如果在完成对第一个账户的操作后系统崩溃,就会导致不一致,即从第一个账户扣除的金额没有存入第二个账户。
在这些情况下,多步操作应该能够不受任何中断地完成,即操作应该是原子的。重要的是,这种原子操作在完成之前不应暴露系统状态。隐藏原子操作的内部状态可以减少系统可能处于的状态数量,从而简化系统的设计和维护。
原子操作由几个步骤组成,每个步骤都可能失败。当发生这种失败时,系统状态应该恢复到原子操作之前的状态。
2. 锁与死锁
当线程访问共享资源时,并发需要严格的规则。对共享数据项的并发读取不受限制,但写入共享数据项应该受到并发控制。例如,两个线程都试图写入的缓冲区,如果缺乏并发控制,就会出现竞争条件。缺乏并发控制带来的风险无处不在,想象一个发电厂的嵌入式系统,多个事件并发发生,而一个子系统出现危险故障的信号可能会丢失。
在所有这些情况下,任何时候只应允许一个线程修改共享数据,其他线程只有在第一个线程完成后才能读取或写入该数据项。这个过程称为序列化,适用于需要由称为锁的控制机制保护的代码段,即临界区,锁一次只允许一个线程访问。
锁是一种授予访问临界区权限的对象。线程要进入临界区,必
超级会员免费看
订阅专栏 解锁全文
2497

被折叠的 条评论
为什么被折叠?



