swift-stm

Twitter: @lbrndnr License

关于

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 许可证 发布。