美文网首页
资源共享问题,同步锁和自旋锁

资源共享问题,同步锁和自旋锁

作者: zhouios | 来源:发表于2016-12-08 16:43 被阅读0次

一,自旋锁
1,nonatomic 非原子性,getter setter 方法都不加锁,多个线程都可以访问;
2,atomic 原子性,内部有一把锁,锁的是赋值的setter方法,读取操作没有上锁,叫做自旋锁。

@property(atomic,strong) NSObject *obj;
//生成属性对应的成员变量
@synthesize obj = _obj;
//模拟原子属性
- (void)setObj:(NSObject *)obj{
    //加锁
    @synchronized(self) {
        _obj = obj;
    }
}

- (NSObject *)obj{
    return _obj;
}

二,同步锁又叫做互斥锁
一个例子:卖火车票,同时多个人通过网络来购票,那么就会资源共享(假如还有5张火车票,此时同时有6个人来通过网络买票,那么他们会发现剩余的票数是5张,他们同时来购买,就会造成每个人买票过后,剩余票数是5-1=4张,其实票数剩余为0,而且其中会有一人没有买到票),那么就可以通过加锁的方式来解决。

//卖票的方法
-(void)sellTicket{
    while (YES) {
        //模拟网络卡
        [NSThread sleepForTimeInterval:1];        
        //加锁的语法,括号内为锁的对象,每个对象内都有一把锁,默认锁是开着的
        //同步锁,互斥锁
        @synchronized(self){
           //tickets是火车票的票数
            if(self.tickets >0){//tickets在上面设置成了自旋锁,但是任然不能够代替同步锁,因为自旋锁仅仅只是对赋值进行同步锁,而这里不仅仅是对赋值进行,还有对票数的读取操作.当一个线程在执行这个操作的时候,那么下一个来的线程,会不断的判断这把锁里面的状态,到底开了没有.而同步锁不是的,下一个线程是安静的等待,知道上一个线程执行完
                self.tickets = self.tickets - 1;
                NSLog(@"%@ 余票 %d",[NSThread currentThread],self.tickets);
                continue;
            }
        }
        NSLog(@"没有票啦");
        break;
    }
}

相关文章

  • 资源共享问题,同步锁和自旋锁

    一,自旋锁1,nonatomic 非原子性,getter setter 方法都不加锁,多个线程都可以访问;2,at...

  • iOS 锁

    同步锁 自旋锁 互斥锁

  • iOS底层探索-多线程锁

    多线程的锁大致可分为两大类:互斥锁、自旋锁;也可以分为三类:互斥锁、自旋锁、读写锁。 一、互斥锁:互斥+同步(强调...

  • CLH并发队列

    1 什么是自旋锁和互斥锁? 由于CLH锁是一种自旋锁,那么我们先来看看自旋锁是什么? 自旋锁说白了也是一种互斥锁,...

  • 多线程

    同步锁,又叫互斥锁,@synchronized(self) 自旋锁:atomic:原子属性,多线程环境下,只有一个...

  • 一文总结Java并发中的锁

    一、锁的类型 1. 自旋锁 自旋锁是计算机科学用于多线程同步的一种锁,线程反复检查锁变量是否可用。由于线程在这一过...

  • 程序员: 我终于知道Java这些“锁”事了

    文章目录 前言 悲观锁和乐观锁 自旋锁和适应性自旋锁 无锁和偏向锁和轻量级锁和重量级锁 公平锁和非公平锁 可重入锁...

  • JVM对锁的优化

    自旋锁和自适应自旋锁 为何引入 互斥同步最大的性能消耗在于阻塞的实现。即线程的挂起和唤醒必须转入内核态中实现,线程...

  • iOS开发中的锁

    锁的分类 根据资源申请者的表现形式,锁分为:自旋锁 和 互斥锁 自旋锁: 不引起调用者的休眠,如果自旋锁已经被别的...

  • iOS 开发中加锁

    [1].OSSpinLock 自旋锁 [1]自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被...

网友评论

      本文标题:资源共享问题,同步锁和自旋锁

      本文链接:https://www.haomeiwen.com/subject/wlesmttx.html