Swift全解析

文章26 |   阅读 13283 |   点赞0

来源:https://blog.csdn.net/u010586842/category_9264386.html

swift详解之十五------------NSThread线程同步锁

x33g5p2x  于2022-03-08 转载在 其他  
字(1.0k)|赞(0)|评价(0)|浏览(580)

NSThread线程同步锁

上小节用NSThread实现读取网络图片 , 这节用NSThread 模拟一个卖票的例子 。用NSLock 或者NSCondition 锁定资源

var total = 100 //总票数
    var w1 = 0  //窗口1卖出票数
    var w2 = 0   //窗口2卖出票数
    var isSell = true  //是否出售
    var lock:NSLock?   
    var condition:NSCondition?

这里首先定义一些变量

然后再点击卖票的时候,开启连个线程模仿窗口

lock = NSLock()
        condition = NSCondition()
        //setTicketValue()
        let thread1 = NSThread(target: self, selector: "run", object: nil)
        thread1.name = "thread-1"
        thread1.start()

        let thread2 = NSThread(target: self, selector: "run", object: nil)
        thread2.name = "thread-2"
        thread2.start()
func run(){
        while(isSell){
            lock?.lock()

            if(total>0){
                NSThread.sleepForTimeInterval(0.2);

                total--
                if(NSThread.currentThread().name == "thread-1")
                {
                    w1++
                }else if(NSThread.currentThread().name == "thread-2"){
                    w2++
                }
                dispatch_async(dispatch_get_main_queue()) {

                    self.setTicketValue()
                }

            }else{

                dispatch_async(dispatch_get_main_queue()) {

                    self.totalTicks.text = "票卖完啦"
                    self.isSell = false
                }

            }

            lock?.unlock()
        }
    }

大概就是这样的一个小示例 。
源码下载地址:源码
学习iOS,有他就够了,小码哥视频,传智、黑马、各种swift书籍

相关文章