2017-02-27 13 views
0

是否有顯示了Array未能在多線程情況下一個明確的例子嗎?我嘗試了下面的代碼,但似乎沒有演示非託管場景中存在的多線程問題。如何證明競爭條件上的陣列

var unsafeArray = [Int]() 

func unsafeMutate() { 
    DispatchQueue.concurrentPerform(iterations: 1000) { index in 
     if unsafeArray.count < 100 { 
      unsafeArray.append(1) 
     } 
     print("\(unsafeArray.count)") //Should not be over 100 
    } 
} 

有沒有更好的例子來說明數組中的線程問題?

回答

0

您的代碼只有爭的一個點。嘗試是這樣的:

import Dispatch 

var unsafeArray = [Int]() 

func unsafeMutate() { 
    DispatchQueue.concurrentPerform(iterations: 1000) { index in 
     let last = unsafeArray.last ?? 0 
     unsafeArray.append(last + 1) 
    } 
} 

unsafeMutate() 
print(unsafeArray)