多个客户端同时运行同一个程序。
这个程序要独占访问表A,程序本身不存在多线程访问表A的情况。该怎么避免死锁呢?我的想法:
如果在ini文件中设置一个标志,程序每次访问表A时都检查ini文件,这样太浪费cpu了吧。

解决方案 »

  1.   

    说的不完全,或者说一个表的多条记录,先后顺序不一致。简单的解决,在更新这些表的数据时,首先把这些要更改的数据全部锁定select * from tablename with uplock
    where id in (需要更改)就不会了
      

  2.   

    我用的Delphi7读写锁:
    dbfm.TTaskListAll.LockTable(ltReadLock);
    dbfm.TTaskListAll.LockTable(ltWriteLock);
    这样就会死锁不会用sql语句的方式。。由于程序中没有多线程访问,所以我考虑不用锁了。
    如何避免多进程修改同一条记录呢?当然,如果用锁可以解决的话,也好,求具体点的解决方案。我用的锁
    的方式会死锁~~
      

  3.   

    每个程序分别修改一个表的不同记录?给表增加一个字段:fwholock
    程序想修改某条记录,就要先把fwholock设置为自己的guid(每个程序运行时,先生成一个guid)
    改完了,再把fwholock改为0。所以,改前还需要判断fwholock是否为0
      

  4.   

    独占A表?
    那应该是数据库的问题了,
    你能控制了自己的代码,控制不了别的软件啊,例如sql查询分析器
      

  5.   

    额 。没这么复杂。
    就是想锁定这个表
    dbfm.TTaskListAll.LockTable(ltReadLock);
    dbfm.TTaskListAll.LockTable(ltWriteLock);
    读写锁不能一下全加上,如果分开加可能死锁。
    有办法直接加上读写锁吗?