今天经过实地的测试对于Delphi XE 10多线程对于全局变量的访问有了实地的结果:
TCriticalSection和TRTLCriticalSection同样的机制,根本不能用,尤其匿名线程。
Monitor使用效果不明显,存在通信线程对于UDPServer对象的锁死问题,匿名线程会不工作,主要是因为XE2之后它还是基于TCriticalSection的优化,因此也不行。
最后使用了自旋锁成功解决问题,对于问题的核心本质好需要观察一段时间,看是否真正的有效果。
自旋锁的使用也很简单,创建,进入,退出,用了也不用释放,是一个比较好的解决方案,弊端就是长时间不用系统会自动释放掉,需要重新创
//引用:
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Math,StrUtils,IniFiles,comobj,SyncObjs;
//定义
FLock : TSpinLock; //自旋锁;保护datainfo的唯一性
//使用