Created
June 19, 2022 08:54
-
-
Save yimajo/104a13e3e063a9c8773eb9eac44eeb73 to your computer and use it in GitHub Desktop.
DispatchQueueをlabelで毎回初期化しても同じqueueが作られるわけではなくデータ競合を起こす
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
var count = 0 | |
// 結果を保持させてすでに重複しているかを確認 | |
var set = Set<Int>() | |
for item in 0..<10000 { | |
let queue = DispatchQueue(label: "fuga") | |
// データ競合以前にそもそもここでエラーになることもある。 error: Execution was interrupted. | |
// The process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation. | |
queue.async { | |
count += 1 | |
print(count, item) // データ競合が起こるとcountはmaxまでたどり着かない | |
if set.contains(count) { | |
print("同じのあるよ!", count) | |
} else { | |
set.insert(count) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment