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];

  • 相关阅读:
    python处理url中的中文编码,以及其他编码问题
    深度学习与神经网络
    Windows下为64位的python3.4.3安装numpy
    TOP 10开源的推荐系统简介
    遗传算法
    java调用c++生成的动态和静态库时遇到的问题
    java程序(一)----HashMap同时获取键值
    Deep Learning In NLP 神经网络与词向量
    word2vec使用说明
    Spring入门_02_属性注入
  • 原文地址:https://www.cnblogs.com/jinjiantong/p/2980258.html
Copyright © 2011-2022 走看看