私は理解しておくと、スレッドセーフな読み書きを提供する必要があります_predictions
のコードを持っています。私のisolationQueueは並行キューであり、そのままにする必要があります。このキューで複数の独立した非同期操作を呼び出して、さまざまな画像の予測を計算します。さまざまなコール間の唯一の共有アイテムは、予測が設定されている場合です。ゲッターとセッターのためのカスタム並行キュー同期のレース条件
var isolationQueue = DispatchQueue.global(qos: .default)
var _predictions: [Int:[Prediction]] = [:]
var predictions:[Int: [Prediction]] {
get {
var result: [Int: [Prediction]]!
isolationQueue.sync {
result = _predictions
}
return result
}
set(value) {
isolationQueue.sync {
self._predictions = value
}
}
}
しかし、なんらかの理由で、Thread Sanitizerがゲッターとセッターの競合状態を検出しているようです。
私は何かが足りないのですか?
isolationQueueはどのように定義されていますか?それは*シリアル*ディスパッチキューですか? –
が更新しました。それはグローバルなので、私はそれが同時に起こると信じています。 'sync'を使った' var isolationQueue = DispatchQueue.global(qos:.default) ' –