swift-stm 是一个乐观且无锁的,使用 Swift 编写的 软件事务内存。它目前非常基础,只是一个草稿。如果我是你,我不会在生产代码中使用它。不过,请随意尝试一下 :)
STM 允许你编写线程安全的代码,通过使代码块看起来像是原子性执行的。这意味着事务要么在给定的时间点执行,要么根本不执行。然而,实际上,它只是执行事务并注意潜在的冲突。这背后的想法是,在现实生活中,冲突很少见,而锁则有点开销。这意味着(技术上)STM 比传统的锁更容易使用(没有死锁,更好的性能等等)。请注意,这只是一个草稿,我不能保证互斥或性能!
所以,不要使用 Dispatch...
func transfer(from: Account, to: Account, amount: Int) -> Bool {
var res = false
queue.async {
let i = from.balance
guard i >= amount else {
return
}
from.balance = i - amount
to.balance = to.balance + amount
res = true
}
return res
}
... 你可以像这样写
func transfer(from: Account, to: Account, amount: Int) -> Bool {
var res = false
atomic {
let i = try from.balance.get()
guard i >= amount else {
return
}
try from.balance.set(i - amount)
try to.balance.set(to.balance.get() + amount)
res = true
}
return res
}
我必须承认,现在的语法有点笨拙...
swift-stm 基于 MIT 许可证 发布。