@synchronized( )的用法

Posted 笑薇薇smile

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@synchronized( )的用法相关的知识,希望对你有一定的参考价值。

 @synchronized()   这个主要是考虑多线程的程序,这个指令可以将{ } 内的代码限制在一个线程执行,如果当前线程没有执行完,其他的线程需要执行就得等着。

 @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改。这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其它线程访问,起到线程的保护作用。 一般在公用变量的时候使用,如单例模式或者操作类的static变量中使用。

指令@synchronized()需要一个参数。该参数可以使任何的Objective-C对象,包括self。这个对象就是互斥信号量。他能够让一个线程对一段代码进行保护,避免别的线程执行该段代码。针对程序中的不同的关键代码段,我们应该分别使用不同的信号量。只有在应用程序编程执行多线程之前就创建好所有需要的互斥信号量对象来避免线程间的竞争才是最安全的。

 

例1:使用self作为互斥信号量来实现当前对象对实例方法访问的同步

-(void)start
{  
    @synchronized(self)  
    {  
        //关键代码;  
    }  
}  

 例2:使用自定义的信号量来对方法加锁

- (void)start {
    OraCardManager *cardManager = [[OraCardManager alloc] init];
    @synchronized (cardManager) {
        //关键代码;
    }
}

 

以上是关于@synchronized( )的用法的主要内容,如果未能解决你的问题,请参考以下文章

内置锁synchronized 介绍与用法

synchronized的用法

synchronized相关用法简述

多线程 Thread 线程同步 synchronized

synchronized的四种用法

Java中Synchronized的用法