题库 题库

【简答题】

试题五(共15分)
    阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
    某银行的转帐业务分为如下两类操作:
  (1)读取帐户A余额到变量x,记为x = R(A);
  (2)将变量x值写入帐户A中的余额,记为W(A, x)。
    从帐户A向帐户B转帐金额x元的伪代码操作序列为:a = R(A), a = a-x, W(A, a),b = R(B), b = b+x, W(B,b)。
    针对上述业务及规则,完成下列问题:
【问题1】(5分)
    根据业务规则,转帐业务要么被全部执行,要么全部不执行,应如何保障?假设参与转帐的帐户余额有大于等于0的约束,上述伪代码执行中可能出现什么情况,应如何处理?(100字以内)
【问题2】(5分)
    若允许对同一帐号同时进行转帐,要保证转帐程序的并发执行,引入共享锁指令SLock(b)和独占锁指令XLock(A)对数据A进行加锁,解锁指令Unlock(A)对数据A进行解锁。
    请补充上述转帐业务的伪代码序列,使其满足2PL协议。
【问题3】(5分)
    若用SQL语句编写的转帐业务事务程序如下:
        START TRANSACTION;
        SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
        UPDATE  Accounts
        SET CurrentBalance = CurrentBalance - Amount
        WHERE AccountID = A;
        if error then  ROLLBACK;
        COMMIT;
        UPDATE  Accounts
        SET CurrentBalance = CurrentBalance + Amount
        WHERE AccountID = B;
        if error then  ROLLBACK;
        COMMIT;
    其中:Accounts为帐户表,CurrentBalance为当前余额,Amount为新存入的金额。
    该事务程序能否保证数据的一致性?如不能,请说明原因并改正。(100字以内)

参考答案

 

相关试题