2019年7月17日 星期三

iOS swift 5: Thread Mode-String Array Index Out of Range


  在兩個Thread中同時對同一個 String Array進行快速的 append 和 remove
  就會發生 Index Out of Range

  已使用網路上找到的各種修改 extension Array方案都無效
 


     
  var dataList = [String]()
  ...
  func Thread1_RemoveFun()
  {
   ...
   DispatchQueue.global().async  /* 問題就出在這一行 */ 
   {
    ...
    if( dataList.Count > 0)  
    {
     dataList.remove(at: 0)
    }  
    ...
   } 
   ...
  }
  
  func Thread2_AppendFun()
  {
   ...
    dataList.append("Test")
   ...
  }
  
  func Thread3_ReadFun()
  {
   if( nIndex < dataList.Count)  
   {
    // dataList.count 輸出是 1 但還是發生
    // 用Debug breakpoint去看, dataList.count 盡然是 0
    print( \(dataList.count)"
    readStr = dataList[nIndex] 
   } 
  }



同一個head, Auto Express 和 Add Express 竟然顯示不同數值
搞不懂...


沒有留言:

張貼留言