2017-02-27 1 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)