您好,欢迎来到二三四教育网。
搜索
您的当前位置:首页iOS atomic nonatomic 多读单写 文件读写安全

iOS atomic nonatomic 多读单写 文件读写安全

来源:二三四教育网

atomic跟nonatomic修饰词区别

    if (!atomic) {
        oldValue = *slot;
        *slot = newValue;
    } else {
        spinlock_t& slotlock = PropertyLocks[slot];
        slotlock.lock();
        oldValue = *slot;
        *slot = newValue;        
        slotlock.unlock();
    }

从源码来看如果属性值是atomic,会使用自旋锁spinlock进行加锁解锁操作。

文件读写安全 IO操作

在文件操作中的原则是 "多读单写"原则,读取得是可以可以同时读取,写入的时候需要单独写入,而且不允许既有写的操作,又有读的操作

pthread_rwlock

使用方法

该锁能保证读取得时候可以多个线程共同执行,写入的时候只能单个写入。

dispatch_barrier_async

栅栏函数:传入得队列必须是手动create创建的并发队列,不能是global或者串行队列,否则 会跟dispatch_async效果一样

dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);
    //读
    dispatch_async(queue, ^{
        NSLog(@"read");
    });
    //写,传入得队列必须是手动create创建的,不能是global或者串行队列,会跟dispatch_async效果一样
    dispatch_barrier_async(queue, ^{
        NSLog(@"write");
    });

Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务