objective c:@synchronized它是如何工作的

时间:2011-10-20 08:16:26

标签: objective-c multithreading synchronization

  

可能重复:
  objective-c : @synchronized, how does it work?

当我有三种方法时:

    -(void)  a {
        @synchronized(self) {
          //part a
        }
     }

    -(void) b {
         @synchronized(self) {
          //part b 
     }

   -(void) c {
        // part c
    }

并且线程在部分a中,那么将为其他线程阻止部分c?

1 个答案:

答案 0 :(得分:8)

只有@synchronized块互相交互。只要一个线程正在执行部分A或部分B,其他线程就不能进入部分A或部分B。部分C不受此影响。

您上面的新评论更加清晰,实际上是在问什么。

@synchronized(self)中,self不是锁定自身的东西, 使用作为锁来保证只有一个线程一次可以进入@synchronized区块。

正如official documentation所解释的:您可以将任何对象用作信号量。

chapter on synchronization全面描述了所有可用的锁定选项,顺便说一句。