"ThreadVar anahtar parçacığı tarafından kullanılmaktadır değişken tanımları kümesini başlar diyor. Her iplik, böylece veri çakışmaları kaçınarak ve iplik koruyarak her değişkenin ayrı bir örneğini verilir bağımsızlık. "
Yani böyle Parallel.For kullanabilirim?
threadvar
threadID: integer;
procedure TForm5.Button1Click(Sender: TObject);
var
Tot: Integer;
begin
TParallel.For(1, Max, procedure (I: Integer)
begin
threadID := i; // each thread gets its own threadID?
if IsPrime (threadID) then
TInterlocked.Increment (Tot);
end);
end;
evet yapabilirsin :) :) – loki
FWIW, bu günlerde 'TInterlocked.Increment' yerine 'AtomicIncrement' kullanmak yerine deyimseldir çünkü bu, etkin bir platform özel kod satırında genişleyen içsel bir özelliktir. –
TInterlocked.Increment, TInterlocked.Add öğesine genişleyen, daha sonra AtomicIncrement öğesine genişleyen ve buna paralel olarak, platforma özgü makine koduna satır içi genişleyen satır içi bir işlevdir. Bu durumda, TInterlocked.Increment aynı şey olacak. –