2011-10-20 39 views
1

可能重複:
objective-c : @synchronized, how does it work?目標C:@synchronized它是如何工作

當我有三個方法:

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

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

    -(void) c { 
     // part c 
    } 

和線程處於部分,那麼會被其他線程阻塞的c部分?

+4

這就像問:「如果我吃一個蘋果和一個乾洗店,它會在中國下雨嗎?」 :) – hop

+0

我只是想知道如果同步「自我」阻止所有對象, – MarekM

+0

@hop和答案是「是」。中國是一個很大的地方。 ;) –

回答

8

只有@synchronized塊互相交互。只要一個線程正在執行部分A或部分B,沒有其他線程可以輸入部分A或部分B。部分C不受此影響。

你上面的新評論做得更清楚了,你實際上在問什麼。

@synchronized(self)self是不是被鎖定本身的東西,它是使用一把鎖,以保證只有一次一個線程可以進入@synchronized塊。

由於official documentation解釋說:您可以使用任何對象作爲信號量。

chapter on synchronization有所有可用的鎖定選項,btw的全面描述。

+0

好的,謝謝,我只是懷疑它 – MarekM

+0

@MarekM:不客氣!如果你喜歡我的回答,你可以點擊複選標記來接受它。你甚至可以爲此獲得聲譽。 – hop

+0

謝謝,我是新的在stackoverflow和目標c, – MarekM