Skip to content

Instantly share code, notes, and snippets.

@hira22
Created April 13, 2023 07:23
Show Gist options
  • Save hira22/9baa3851cffc5ee1db1bf4f3074bbb96 to your computer and use it in GitHub Desktop.
Save hira22/9baa3851cffc5ee1db1bf4f3074bbb96 to your computer and use it in GitHub Desktop.
Actor のサンプル
import _Concurrency
// MARK: Class
print("------------------ CLASS ------------------------")
// class だと順番がぐちゃぐちゃになることがある 1 -> 8 まで順番に出力されない(データ競合)
class ClassCounter {
static var shared = ClassCounter()
private init() {}
var value = 0
func increment() -> Int {
value += 1
return value
}
}
Task.detached {
print( ClassCounter.shared.increment()) // data race
}
Task.detached {
print( ClassCounter.shared.increment()) // data race
}
Task.detached {
print( ClassCounter.shared.increment()) // data race
}
Task.detached {
print( ClassCounter.shared.increment()) // data race
}
Task.detached {
print( ClassCounter.shared.increment()) // data race
}
Task.detached {
print( ClassCounter.shared.increment()) // data race
}
Task.detached {
print( ClassCounter.shared.increment()) // data race
}
Task.detached {
print( ClassCounter.shared.increment()) // data race
}
// MARK: Actor
print("------------------ ACTOR ------------------------")
// actor はデータ競合から守る 1 -> 8 まで順番に表示される
actor ActorCounter {
static var shared = ActorCounter()
private init() {}
var value = 0
func increment() -> Int {
value += 1
return value
}
}
Task.detached {
print(await ActorCounter.shared.increment())
}
Task.detached {
print(await ActorCounter.shared.increment())
}
Task.detached {
print(await ActorCounter.shared.increment())
}
Task.detached {
print(await ActorCounter.shared.increment())
}
Task.detached {
print(await ActorCounter.shared.increment())
}
Task.detached {
print(await ActorCounter.shared.increment())
}
Task.detached {
print(await ActorCounter.shared.increment())
}
Task.detached {
print(await ActorCounter.shared.increment())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment