//
// 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)
}
}
}