2009-05-28 4 views
1

J'ai une TObjectList qui doit être traitée par plusieurs threads. Puisque TObjectList hérite en interne de TList et TList implémente ses internes en tant que tableau je me demande:L'accès à différents index d'un thread TObjectList est-il sécurisé?

Est-il thread-sûr pour accéder au tableau à partir de différents threads tant que nous accédons à différents index?

Par exemple, ayant un appelé TObjectList myObjectList:

start = 0; end = myObjectList.Count div 2;

Thread1:

for i := 0 to end do 
    Process(myObjectList[i]); 

Thread2:

for i := end + 1 to myObjectList.Count - 1 do 
    Process(myObjectList[i]); 

Répondre

12

Accès aux membres comme celui-ci est tout à fait OK.
Tant que vous ne modifiez pas la liste en même temps (par exemple, en ajoutant, en supprimant des éléments).
Si certains des objets sous-jacents sont identiques, vous pouvez rencontrer des problèmes s'ils ne sont pas sécurisés.

0

J'envisagerais d'utiliser TThreadList, il offre des méthodes de verrouillage et de déverrouillage, que vous pouvez utiliser pour modifier la liste d'une manière thread-safe. Si vous préférez utiliser une TObjectList, vous pouvez consulter le code de TThreadList et effectuer vous-même le verrouillage à l'aide d'une section TCriticalSection.

+0

Je n'ai pas vraiment besoin de modifier la liste, juste de la lire, donc je veux éviter le fardeau du verrouillage. Je voulais juste confirmer cela, tant que vous venez de lire la liste, il n'y a pas de problème. –

+0

"Lecture simple" est toujours sécurisé. Vous ne rencontrez des problèmes que lorsque vous commencez à changer des choses dans un thread alors qu'un autre thread essaie de les utiliser. –

Questions connexes