NSThread 买票

创建2个线程买票,涉及到临界资源保护。

创建线程代码如下:

ticketsThreadone = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];

[ticketsThreadone setName:@"Thread-1"];

[ticketsThreadone start];

注意:线程的函数 run跑完后,这个线程就结束了,因此买票的函数应该是个死循环,才能实现多次买票

代码:

#import "ViewController.h"

@interface ViewController ()
{
    int tickets;
    int count;
    NSLock *theLock;
    NSThread *ticketsThreadone;
    NSThread *ticketsThreadtwo;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    tickets = 10;
    count = 0;
    theLock = [[NSLock alloc] init];
    // 锁对象

    ticketsThreadone = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
    [ticketsThreadone setName:@"Thread-1"];
    [ticketsThreadone start];

    ticketsThreadtwo = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil];
    [ticketsThreadtwo setName:@"Thread-2"];
    [ticketsThreadtwo start];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)run{

    while (TRUE) {

        // 上锁
       [theLock lock];
        if(tickets > 0){

            [NSThread sleepForTimeInterval:0.1];
            tickets--;
            count = 10 - tickets;
            NSLog(@"当前票数是:%d,售出:%d,线程名:%@",tickets,count,[[NSThread currentThread] name]);
        }else{

            break;
        }
        //解锁
        [theLock unlock];
    }
}
时间: 2024-10-22 21:41:23

NSThread 买票的相关文章

编程之美之买票找零

题目:假设有2N个人在排队买票,其中有N个人手持50元的钞票,另外有N个人手持100元的钞票,假设开始售票时,售票处没有零钱,问这2N个人有多少种排队方式,不至使售票处出现找不开钱的局面? 分析:队伍的序号标为0,1,...,2n-1,并把50元看作左括号,100元看作右括号,合法序列即括号能完成配对的序列.对于一个合法的序列,第0个一定是左括号,它必然与某个右括号配对,记其位置为k.那么从1到k-1.k+1到2n-1也分别是两个合法序列.那么,k必然是奇数(1到k-1一共有偶数个),设k=2i

[BOP][Beauty of Programming][MSRA] 从“买票问题”谈起

问题(买票问题): 在一场激烈的足球赛开始前,售票工作正在紧张地进行中. 已知: 1.每张球票为50元. 2.现在有2n个人排队购票, 其中有n个人手持50元钞票,另外n个人手持100元钞票, 假设开始售票时,售票处没有零钱. 问:这2n个人有多少种排队方式,不至使售票处出现找不开钱的局面? 摘要: 通过对买票找零问题的分析,迁移到括号匹配问题,得到递推式.并通过数学分析中级数幂级数知识,推导出递推式的通项,以此解决部分衍生问题. 这里符号怎么玩…… 见外链吧 http://yunpan.cn/

电影院买票问题->排队找钱

问题:有2n个人排队进电影院,票价是50美分.在这2n个人当中,其中n个人只有50美分,另外n个人有1美元(纸票子).愚蠢的电影院开始卖票时1分钱也没有.问:有多少种排队方法使得每当一个拥有1美元买票时,电影院都有50美分找钱 注:1美元=100美分拥有1美元的人,拥有的是纸币,没法破成2个50美分 解析:符合卡特兰数( Catalan数),因此直接可以得出答案:(2n)/(n!*(n+1)!). Catalan数相关:令h(0)=1,h(1)=1: 1.catalan数满足递推式: h(n)=

简单的多线程买票模拟程序(lock解决多线程存在大安全隐患)

—————————————————————— jdk1.5的lock代替synchronized,condition封装 Object对象里sleep,wait,notify ,notifyAll —————————————————————— /*  需求:  写一个简单的多线程模拟买票的程序  四个买票窗口,一共有100张票 */import java.util.concurrent.locks.*;   class Tick implements Runnable{         priv

调查:近7成受访网友买票还找黄牛

过年了,很多在外工作了一年的人们,随着乡愁的召唤,又开始了一年一度的大迁徙.南都联合大粤网发起的网络民调,有1141名网友参与调查.数据显示,今年春运,81.68%的返乡旅客依然选择乘坐火车.可是回家的路并不轻松,截至1月15日,依然还有89 .92%的人没有买到回家的火车票.与之对应的是,今年春运铁路12306网站首次施行提前60天购票,除夕从广州向全国各方向的火车票一经发售,就被抢购一空.如何才能买到回家的车票?数据给出的结论是,67.75%的受访网友是通过找黄牛才买到票的. 调查结果显示,

简单的多线程买票模拟程序

/*  需求:  写一个简单的多线程模拟买票的程序  四个买票窗口,一共有100张票 */ class Tick implements Runnable{         private static  int tick=100;         private String window;         public  void windowName(String window){                 synchronized(Tick.class){              

线程模拟买票

存在问题:这时候启动了四个线程,那么tickets是一个成员变量,也就是在一个线程对象中都维护了属于自己的tickets属性,那么就总共存在了四份. 解决方案一:tickets使用staitc修饰,使每个线程对象都是共享一份属性. 1.1 创建线程的方式二 创建线程的第二种方式.使用Runnable接口. 该类中的代码就是对线程要执行的任务的定义. 1:定义了实现Runnable接口 2:重写Runnable接口中的run方法,就是将线程运行的代码放入在run方法中 3:通过Thread类建立线

排队买票

要求:假定总票数是100张        假设 有5个人排队卖票,同一时间只能有一个人买票        票卖出去之后,票数要减少 代码: /** * */ package com.niit.homework; /** * @author: Annie * @date:2016年6月16日 * @description:假定总票数是100张 假设 有5个人排队卖票,同一时间只能有一个人买票 票卖出去之后,票数要减少 */ public class TicketDemo implements Ru

后台代码之买票和查找核实航班的代码

//后台买票 public List<String[]> buy(Integer lid,String radio1) { List<String[]> result=new ArrayList<String[]>(); if(radio1.toString().equals("头等舱")) { String sql="SELECT b.`name`,a.linename,\r\n" + " a.startplace,a