美文网首页
swift 关于多线程互斥锁(卖票为例)

swift 关于多线程互斥锁(卖票为例)

作者: 谢千域 | 来源:发表于2021-10-31 11:24 被阅读0次

    上代码

    import UIKit
    
    class ViewController: UIViewController {
        
        var tickets = 100
        var theardA:Thread?
        var theardB:Thread?
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
            theardA = Thread.init(target: self, selector: #selector(sale), object: nil)
            theardA?.name = "A窗口"
            theardB = Thread.init(target: self, selector: #selector(sale), object: nil)
            theardB?.name = "B窗口"
            
        }
        
        @objc func sale () {
            
            for i in 1...100 {
                
                buyTicket(username: "person\(i)")
            }
        }
        
        //开始买票
        @IBAction func begain(_ sender: UIButton) {
            
            theardA?.start()
            theardB?.start()
            
        }
        
        ///objc_sync_enter(lockString)
        ///objc_sync_exit(lockString)
        
        func buyTicket(username: String) {
            
            Thread.sleep(forTimeInterval: 0.5)
            
            ///加上互斥锁,保护资源 同一时刻只能被一个线程读写
            objc_sync_enter(self)
            
            self.tickets -= 1
            
            let currentName = Thread.current.name! as String
            
            print("\(username)在\(currentName)买了一张票,剩余票数:\(self.tickets)")
            
            objc_sync_exit(self)
        }
        
        
        
    }
    
    
    WechatIMG9.png

    相关文章

      网友评论

          本文标题:swift 关于多线程互斥锁(卖票为例)

          本文链接:https://www.haomeiwen.com/subject/jvroaltx.html