@synchronized( )的用法

 @synchronized()   这个主要是考虑多线程的程序,这个指令能够将{ } 内的代码限制在一个线程执行,若是当前线程没有执行完,其余的线程须要执行就得等着。objective-c

 @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) {
        //关键代码;
    }
}
相关文章
相关标签/搜索