访问TObjectList线程的不同索引是否安全?

时间:2009-05-28 08:10:16

标签: multithreading delphi thread-safety

我有一个需要由多个线程处理的TObjectList。由于内部TObjectList继承自TList,TList将其内部实现为数组,我想知道:

只要我们访问不同的索引,从不同的线程访问数组是否安全?

例如,有一个名为myObjectList的TObjectList:

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

线程1:

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

线程2:

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

2 个答案:

答案 0 :(得分:12)

访问这样的成员是完全可以的 只要您不同时更改列表(例如添加,删除项目) 如果某些底层对象是相同的,那么如果它们不是线程安全的话,您可能会遇到问题。

答案 1 :(得分:0)

我会考虑使用TThreadList,它提供了Lock和Unlock方法,您可以使用它以线程安全的方式更改列表。如果您更喜欢使用TObjectList,您可以查看TThreadList的代码,并使用TCriticalSection自行锁定。