2009-05-28 35 views
1

我有一個TObjectList需要由幾個線程處理。由於內部TObjectList繼承自TList,並且TList將其內部實現爲一個數組,我不知道:正在訪問TObjectList線程安全的不同索引嗎?

只要我們訪問不同的索引,它是否可以安全地從不同線程訪問數組?

例如,具有TObjectList稱爲myObjectList:

開始= 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]); 

回答

12

訪問這樣的成員是完全確定。
只要你沒有在同一時間改變列表(例如添加,刪除項目)。
如果某些底層對象相同,那麼如果它們不是線程安全的,則可能會出現問題。

0

我會考慮使用TThreadList,它提供了鎖定和解鎖方法,您可以使用以線程安全的方式更改列表。如果你更喜歡使用TObjectList,你可以看看TThreadList的代碼,並使用TCriticalSection自己鎖定。

+0

我真的不需要修改列表,只是閱讀它,所以我想避免鎖定的負擔。我只是想確認一下,只要你閱讀清單就沒有問題。 – 2009-05-28 08:47:02