@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) {
        //关键代码;
    }
}

 

posted @ 2017-07-20 16:15  笑薇薇smile  阅读(1912)  评论(0编辑  收藏  举报