开发过程中怎样来考虑并发性和死锁的问题

解决方案 »

  1.   

    我觉得首先应该知道Oracle并发处理机制
      

  2.   

    用事务及安全点。Oracle中的事务本来就是并发的。我们一般定立一个写表顺序机制(因为只有定表时才出现锁定)。
    如有表A,B, C, D, E。
    a程序会写到A, B,C表。
    b程序会写到A,C,E表。错误做法:
    a程序写入顺序为A,C,B
    b程序写入顺序为C, A, E
    当a程序已锁定A,而且准备锁定C。 同时,b程序要锁定C, 发现C未被锁定,于是锁定C,接着又要锁定A。这样就现死锁(因为A已被锁定,而已等待锁定C)。正确做法:(按已规定的锁定顺序)
    a程序写入顺序为A,B, C 
    b程序写入顺序为A, C, E
    当a程序已锁定A, 而且要锁定其他表(如B,C)。 此时,b程序要锁定A时发现A已锁定,此时等待A,直到A解锁。如此类推....