請耐心等待,因爲我是新手。D中數組的線程安全性?
我有一個數組和兩個線程。
extractedArray = myArray[0..10];
myArray = myArray[10..myArray.length()];
這是線程安全的:當需要
myArray ~= newArray;
第二個線程刪除該數組元素在需要時
第一線追加新的元素添加到數組? 當兩個線程完全同時在陣列上交互時會發生什麼?
請耐心等待,因爲我是新手。D中數組的線程安全性?
我有一個數組和兩個線程。
extractedArray = myArray[0..10];
myArray = myArray[10..myArray.length()];
這是線程安全的:當需要
myArray ~= newArray;
第二個線程刪除該數組元素在需要時
第一線追加新的元素添加到數組? 當兩個線程完全同時在陣列上交互時會發生什麼?
這不是線程安全的
這有經典的丟失更新種族:
附加裝置examening數組,看它是否能就地擴大,如果不是需要做出(O( n)時間)副本,而副本繁忙時,另一個線程可以切片,當副本完成時,該片段將返回
您應該使用鏈接列表實現,以便更安全地使用線程
Java's ConcurrentLinkedQueue
使用列表described here進行實施,您可以在標準庫中使用core.atomic.cas()
執行它
它不是線程安全的。解決這個問題的最簡單方法是用塊來包圍數組操作。更多關於它的地方:http://dlang.org/statement.html#SynchronizedStatement
請注意,多個「同步」塊(無表達式)不會彼此同步。 – 2012-04-12 23:21:59
感謝您的信息。 – ains 2012-04-13 05:48:00
不,它是不是線程安全。如果您通過線程共享數據,則需要通過synchronized statements,synchronized functions,core.atomic
和mutexes等工具來處理線程安全問題。
但是,需要指出的另一件大事是,D中的所有數據默認是線程本地的。所以,你不能跨線程訪問數據,除非明確shared。所以,你通常不必擔心線程安全問題。只有當你明確地分享數據時,這是一個問題。
感謝您的信息。 – ains 2012-04-13 05:48:09
謝謝你。 – ains 2012-04-12 11:26:40