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


转载:http://www.cnblogs.com/jinjiantong/archive/2013/03/25/2980258.html



NSLock* arrayLock = GetArrayLock();
NSMutableArray* myArray = GetSharedArray();
id anObject;

[arrayLock lock];
anObject = [myArray objectAtIndex:0];
[anObject retain];
[arrayLock unlock];

[anObject doSomething];
[anObject release];

And the question is: Is there any way to solve the problem while using ARC?


Answer:

ARC solves this problem for you automatically; by default every pointer is a strong pointer, which means that the object is guaranteed to be retained until you are done using that pointer.

This means that whenever you get an object out of an array, ARC always retains that object. This guarantees its lifetime, even if the object is later removed from the array.



参考:http://stackoverflow.com/questions/16836843/thread-safe-design-with-arc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值