多线程下读写同一个文件,如果防止写冲突?(50分)

  • 主题发起人 主题发起人 bugcool
  • 开始时间 开始时间
B

bugcool

Unregistered / Unconfirmed
GUEST, unregistred user!
我要写一个记录日志的类,日志内容是记录在一个文本文件中的,
这个类可能会在多线程环境下使用,请问怎么防止同时写一个文件
造成冲突?
 
我用了添加办法:
新建一个临时文件,记录后一次添加到一个主文件中。
 
线程应该对资源互斥访问。。。。另外

>>太阳河上, 时间:2004-3-24 11:53:38, ID:2519104
>>我用了添加办法:
>>新建一个临时文件,记录后一次添加到一个主文件中。
如果添加到一半的时候,线程的时间片到了,就会出错!!这是肯定的!!

不要说写文件这种访问慢速外设情况了,就是我们两个线程对一个内存变量同时修改都可能出错,
因为机器执行的是汇编级指令,即使一个 if XXX then i:=i+1
,也是分成许多的小指令的,
那么,当判断完 XXX 的时候,还没有来得及对i加1,时间片到了的话,另外一个线程看到的
i 就不是正确的 i ,就出错 。然后回到 原来的线程 就更出错。。。。。。 请看:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2392085 关于多线程访问同一对象
 
TCriticalSection(其实和麻子的临界区是一样的)
 
多人接受答案了。
 
后退
顶部