ios互斥锁

//
//  ViewController.swift
//  多线程
//
//  Created by admin on 16/2/17.
//  Copyright © 2016年 jin. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    var ticketsNumber = 20
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        let threadA = NSThread(target: self, selector: "buyTicket", object: nil)
        threadA.name = "售票员A"
        threadA.start()
        let threadB = NSThread(target: self, selector: "buyTicket", object: nil)
        threadB.name = "售票员B"
        threadB.start()
    }
    // 模拟卖票
    func buyTicket()
    {
        /**
        注意点:
        1.锁定的代码尽量少
        2.加锁范围内的代码同一时间只允许一个程序执行
        3.继承自NSObject的类都可以作为互斥锁的参数
        4.要保证所有的线程访问到这个锁,并且所有的线程访问的都是同一个锁对象
        */
        while(self.ticketsNumber > 0)
        {
            sleep(1)
            // 锁
            objc_sync_enter(self)
            print(NSThread.currentThread().name! + "卖出了\(self.ticketsNumber)号票")
            self.ticketsNumber--
            // 解锁
            objc_sync_exit(self)
        }
    }
}

标签: swift, iOS多线程, 互斥锁

添加新评论