2012-04-12 36 views
2

請耐心等待,因爲我是新手。D中數組的線程安全性?

我有一個數組和兩個線程。

extractedArray = myArray[0..10]; 
myArray = myArray[10..myArray.length()]; 

這是線程安全的:當需要

myArray ~= newArray; 

第二個線程刪除該數組元素在需要時

第一線追加新的元素添加到數組? 當兩個線程完全同時在陣列上交互時會發生什麼?

回答

2

這不是線程安全的

這有經典的丟失更新種族:

附加裝置examening數組,看它是否能就地擴大,如果不是需要做出(O( n)時間)副本,而副本繁忙時,另一個線程可以切片,當副本完成時,該片段將返回

您應該使用鏈接列表實現,以便更安全地使用線程

Java's ConcurrentLinkedQueue使用列表described here進行實施,您可以在標準庫中使用core.atomic.cas()執行它

+0

謝謝你。 – ains 2012-04-12 11:26:40

2

它不是線程安全的。解決這個問題的最簡單方法是用​​塊來包圍數組操作。更多關於它的地方:http://dlang.org/statement.html#SynchronizedStatement

+2

請注意,多個「同步」塊(無表達式)不會彼此同步。 – 2012-04-12 23:21:59

+0

感謝您的信息。 – ains 2012-04-13 05:48:00

4

不,它是不是線程安全。如果您通過線程共享數據,則需要通過synchronized statements,synchronized functions,core.atomicmutexes等工具來處理線程安全問題。

但是,需要指出的另一件大事是,D中的所有數據默認是線程本地的。所以,你不能跨線程訪問數據,除非明確shared。所以,你通常不必擔心線程安全問題。只有當你明確地分享數據時,這是一個問題。

+0

感謝您的信息。 – ains 2012-04-13 05:48:09