今天学习Delphi System.Rtti的源代码,进一步学习到了如何在线程中使用锁。参考官方的代码整理出来分享:
var
_GlobalContextTokenLock: TObject;
定义一个全局的实例,供TMonitor使用。
再写一个方法,返回_GlobalContextTokenLock:
function GCTokenLock: TObject; inline; begin if _GlobalContextTokenLock = nil then _GlobalContextTokenLock := TObject.Create; Result := _GlobalContextTokenLock end;
在这个单元的initialization及finalization段中建立及释放这个对象:
initialization GCTokenLock; finalization _GlobalContextTokenLock.Free;
class procedure TRttiContext.DropContext; begin TMonitor.Enter(GCTokenLock); try //具体的业务代码,线程安全的 finally TMonitor.Exit(GCTokenLock); end; end;
这是从官方源码中整理出来的,参考这个代码,我们可以更简化的使用TMonitor来加锁与解锁。