53、分析在‘丢失更新’问题中,事务的原子性、一致性和隔离性属性被违反的情况
当进程使用变量的过期值进行计算并写回新的错误值时,系统会变得不一致,这会导致事务的原子性、一致性和隔离性属性被违反。
例如在两个线程更新共享变量的场景中,若访问重叠,一个进程可能会覆盖另一个进程的更新,造成数据不一致,违反了事务的一致性和隔离性。
像在银行系统里,存款和取款操作若无规则地重叠,就可能出现一方操作覆盖另一方的情况,导致银行或账户持有人损失金钱,这也体现了事务属性被违反。
54、练习2:理解“丢失更新”问题(第二部分:探究问题的本质) – 分析在线航班预订系统和仓库库存管理系统受影响的情况
以下是调整为 Markdown 格式的文本内容:
在线航班预订系统可能出现超售座位,或当计算机系统显示剩余座位数为零时,实际仍有空座的情况。
仓库库存管理系统可能出现实际库存物品数量与计算机系统显示数量不符,可能实际库存更多或更少的情况。
55、列举易受丢失更新问题影响的示例系统
易受丢失更新问题影响的示例系统包括在线银行、股票交易、在线购物和电子商务。
56、练习2:理解“丢失更新”问题(第二部分:探究问题的本质) – 分析差异的随机性情况
差异是随机的。差异产生的原因是线程执行时间对低级调度器决策序列高度敏感,这些决策序列会根据精确的系统条件在每次运行时有所不同。并且这种差异不可预测,因此可能更严重。
57、练习2:理解“丢失更新”问题(第二部分:探究问题的本质) – 分析差异产生的原因
差异产生是因为线程执行时间对底层调度器决策序列高度敏感,这些决策序列会根据精确的系统条件在每次运行时有所不同。
58、练习2:理解“丢失更新”问题(第二部分:探究问题的本质) – 分析差异不可预测性及严重性
差异是随机的,因为线程执行时间对底层调度器决策序列高度敏感,每次运行会因精确系统条件不同而不同,所以差异不可预测,这使其潜在危害更严重。
59、练习3:理解“丢失更新”问题(第3部分:锁的必要性) – 分析锁定机制的作用
锁定机制
锁定机制可防止对资源的重叠访问,确保同一时间只有一个进程能访问资源,避免丢失更新问题。
锁需应用于两个线程
在应用锁时要防止外部进程的读写操作
锁的应用时机
锁应在事务的读取阶段之前应用
在写入阶段之后释放
60、练习3:理解“丢失更新”问题(第3部分:锁的必要性) – 分析锁应作用于哪些线程
锁必须作用于两个线程
61、练习3:理解“丢失更新”问题(第3部分:锁的必要性) – 分析锁应用时外部进程的读写情况
锁应用时,必须防止外部进程的读写操作。
62、练习3:理解“丢失更新”问题(第3部分:锁的必要性) – 分析锁应在事务的哪个阶段应用
锁应在事务的读取阶段之前应用
63、练习3:理解“丢失更新”问题(第3部分:锁的必要性) – 分析锁应在事务的哪个阶段释放
锁应在事务的写阶段之后释放
64、练习3:理解“丢失更新”问题(第3部分:锁的必要性) – 分析实验应确认的内容
实验应确认锁应在事务的读取阶段之前应用,且在事务的写入阶段之后释放。
65、分析“锁确保一次只有一个进程可以访问资源”这句话的含义
这句话意味着通过使用锁,能够避免多个进程同时访问同一资源,从而防止资源访问重叠。这样可以保证在同一时间内,只有一个进程能够对资源进行操作,进而避免像“丢失更新”这类问题的发生,保证系统数据的一致性。
66、分析“通过允许一次只有一个进程访问资源,丢失更新问题不会发生”这句话的含义
这句话意味着当对资源的访问进行限制,同一时间只有一个进程可以访问该资源时,就不会出现一个进程覆盖另一个进程更新的情况,从而避免了 丢失更新问题 ,保证了 数据的一致性 。
67、Exercise 4: 探索死锁问题 – 分析线程请求资源及获取资源后的情况
线程请求事务所需的资源( 红色箭头 )。
一旦资源空闲,线程被授予对该资源的访问权限,并在事务执行时持有该资源( 蓝色箭头 )。
68、练习4:探究死锁问题 – 分析死锁更可能发生的情况
以下是将给定文本内容调整为Markdown格式的结果:
死锁更可能在以下情况发生:
每个事务中使用更多资源
事务锁定资源的时间更长
事务发生更频繁
具体而言:
若每个事务至少使用两个资源(如数据库中每个事务访问两条或更多记录),死锁可能发生
若在表级别执行锁定且不使用其他资源,不会发生死锁,但一个进程需等待另一个进程使用完资源
若使用行级锁定且每个进程访问不同的记录集,死锁一般不会发生
若访问模式完全为只读,则无需锁定,死锁不会发生