码迷,mamicode.com
首页 > 其他好文 > 详细

常用锁基本使用情况

时间:2016-08-13 10:01:08      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

1.在多线程的情况下,使用锁变得非常重要,一旦一个线程获得锁,其他线程一定等待.

  @synchronized互斥锁:只能加锁Objective-C对象,会隐式地添加异常处理代码,也就是当发生异常时会

  自动释放互斥锁,所以会有一定的性能损耗 

  dispatch_async(dispatch_get_global_queue(0,0), ^{

  @synchronized(_myLockObj){  给对象加锁,防止多线程同时访问。

 

 

   }};

2. 

 NSLock互斥锁:  NSLock类使用的是POSIX线程来实现它的锁操作,而且需要注意的是必须在同一 线程内发送unlock消息,否则会发生不确定的情况。  NSLock不能被用来实现迭代锁,因为 如果发生lock消息两次的话,整个线程将被永久锁住 

  dispatch_async(dispatch_get_global_queue(0, 0), ^{

        [lock lock];

        NSLog(@"123496978");

        [lock unlock];

        

    });

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        [lock lock];

        NSLog(@"uweujejwdjje");

        [lock unlock];

    });

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        [lock lock];

        NSLog(@"123");

        [lock unlock];

        

    });

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        [lock lock];

        NSLog(@"uweu");

        [lock unlock];

    });   //执行完和串行效果一样,依次执行

 

3

  //NSConditionLock条件锁:可以设置其条件,下一个线程条件设置(10)相同或者不设置条件线程也会执行。

  dispatch_async(dispatch_get_global_queue(0, 0), ^{

        [conditionlock lockWhenCondition:10];

        NSLog(@"123496978");

        [conditionlock unlock];

       

    });

    dispatch_async(dispatch_get_global_queue(0, 0), ^{

        [conditionlock lock];

        NSLog(@"uweujejwdjje");

        [conditionlock unlockWithCondition:10];

    });

4.

  NSCondition锁:  一个线程在等待信号而阻塞时,可以被另外一个线程唤醒,是互斥锁和条件锁的结合体 

   dispatch_async(dispatch_get_global_queue(00), ^{

        [condition lock];

        NSLog(@"123496978");

        [condition unlock];

       

    });

    dispatch_async(dispatch_get_global_queue(00), ^{

        [condition lock];

        NSLog(@"uweujejwdjje");

        [condition unlock];

    });

常用锁基本使用情况

标签:

原文地址:http://www.cnblogs.com/LMML/p/5767213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!