zoukankan      html  css  js  c++  java
  • [ios]NSLock锁

    线程同步:

    1,原子操作
    2,内存屏蔽和volatile变量
    只确保每次操作都是从内存中获取信息,而不用寄存器内保存的数据
    OSMemoryBarrier函数,设置内存屏蔽
    volatile变量
    线程安全设计技巧:
     
    ===代码一---有风险的代码

        NSLock* arrayLock = [self GetArrayLock];

        NSMutableArray* myArray = GetSharedArray();

        

        id anObject;

        [arrayLock lock];

        anObject = [myArray objectAtIndex:0];

        [arrayLock unlock];

        

         // 在处理doSomething的时候共享资源myArray可能被修改,下面的操作就是有风险的操作

        anObject doSomething];

    ===代码二---低效率的代码
           NSLock* arrayLock = [self GetArrayLock];

        NSMutableArray* myArray = GetSharedArray();

        

        id anObject;

        [arrayLock lock];

        anObject = [myArray objectAtIndex:0];


        // 在处理doSomething放到Lock里面,如果doSomething处理时间比较长,那么就形成了效率瓶颈,影响程序效率

        anObject doSomething];


        [arrayLock unlock];

    ===代码三---高效率的代码

        NSLock* arrayLock = [self GetArrayLock];

        NSMutableArray* myArray = GetSharedArray();

        

        id anObject;

        [arrayLock lock];

        anObject = [myArray objectAtIndex:0];

        // 把对象retain and save,防止在unlockmyArray里面的内容被修改

        [anObject retain];

        [arrayLock unlock];

        

        anObject doSomething];

        [anObject release];

  • 相关阅读:
    tomcat 自动部署代码
    weex Android
    视频大全
    sql语句
    来一个朴素的验证码小插件
    tcp通信客户端本地日志查看
    python练习题
    由count(sno)和count(cno)引发的思考
    centos7命令行和图形界面的相互切换(附centos7安装配置教程)
    Jenkins配置有用摘抄笔记
  • 原文地址:https://www.cnblogs.com/jinjiantong/p/2980258.html
Copyright © 2011-2022 走看看