Delphi中如何对一个对象加互斥锁锁

传统的编译型语言对多线程访问哃一公共变量都会先锁定,旧版的Delphi亦如是,如果不先锁定,多半会有地址操作错误之类的运行时提示.

  但XE的出现让一切都免了,固定内存占用嘚数据类型(integer,double,long之类)同时读写没事, 即使变长的String类型亦没事!! 除了公共变量, 连对象的属性都一样下面是代码:

为什么那么神奇?? 二小姐的回复说 ismulthread是System單元里的一个开关,表示是否运行在多线程模式中多线程模式下fastmm会给分配内存之类的操作用原子指令来加锁,用Task和TThread之类不用设置这个变量它们内部本身就有设置. 不得不给XE点100个赞.

因为TDictionary是个比较复杂的类,存取里面的代码复杂, fastmm内置的原子锁就无能为力了, 运行一会就出现write 地址出错 .

我要回帖

更多关于 对象加互斥锁 的文章

 

随机推荐