anchor.diff:  procedure TFLRECache.Clear;
   var Index:longint;
   begin
  - for Index:=0 to List.Count-1 do begin
  -  TFLRE(List[Index]).Free;
  - end;
  - List.Clear;
  - HashMap.Clear;
  + ParallelLockEnter(@ParallelLock);
  + try
  +  for Index:=0 to List.Count-1 do begin
  +   TFLRE(List[Index]).Free;
  +  end;
  +  List.Clear;
  +  HashMap.Clear;
  + finally
  +  ParallelLockLeave(@ParallelLock);
  + end;
   end;
   
   function TFLRECache.Get(const ARegularExpression:TFLRERawByteString;const AFlags:TFLREFlags=[rfDELIMITERS]):TFLRE;
   var HashKey:TFLRERawByteString;
   begin
    HashKey:=PtrCopy(pointer(@AFlags),0,SizeOf(TFLREFlags))+#0#1#0+ARegularExpression;
  - result:=HashMap.GetValue(HashKey);
  - if not assigned(result) then begin
  -  result:=TFLRE.Create(ARegularExpression,AFlags);
  -  List.Add(result);
  -  HashMap.Add(HashKey,result);
  + ParallelLockEnter(@ParallelLock);
  + try
  +  result:=HashMap.GetValue(HashKey);
  +  if not assigned(result) then begin
  +   result:=TFLRE.Create(ARegularExpression,AFlags);
  +   List.Add(result);
  +   HashMap.Add(HashKey,result);
  +  end;
  + finally
  +  ParallelLockLeave(@ParallelLock);
    end;
   end;
   
  
positive.code: constructor TFLRECache.Create;
  begin
   inherited Create;
   List:=TList.Create;
   HashMap:=TFLRECacheHashMap.Create;
  end;
  
negative.code:  for Index:=0 to length(ARegularExpressions)-1 do begin
    HashKey:=HashKey+#0#2#0+ARegularExpressions[Index];
   end;
   ParallelLockEnter(@ParallelLock);
   try
    result:=HashMap.GetValue(HashKey);
    if not assigned(result) then begin
     result:=TFLRE.Create(ARegularExpressions,AFlags);
     List.Add(result);
     HashMap.Add(HashKey,result);
    end;
   finally
    ParallelLockLeave(@ParallelLock);
   end;
  end;
  
  