美文网首页
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