2010-12-27 3 views
24

誰かが@synchronizedブロックから戻っていいのかどうか教えてもらえますか?例えば内部からの返信a対同期ブロック@

- (id)methodThatReturnsSomething:(BOOL)bDoIt 
    { 
     @synchronized(self) {  

      if(!bDoIt) return nil; 
      ... 
     } 
    } 

またはI(代わりNSLockを使用して)最初のブロックのロックを解除する必要がありますか?

+0

[同期ブロック内のメソッドから返される](http://stackoverflow.com/questions/2704400/returning-from-method-inside-a-synchronized-block) –

答えて

28

@synchronizedは、あなたが戻ってロックを放棄すると自動的にその例外処理コンテキストを取り除きます。したがって、あなたが書いたコードは問題ありません。

+0

私はそれを修正しました!あなたの答えをありがとう! – Vassilis

+6

+1これは、これがかなり*理由* '@ synchronized'が存在することに言及する価値があります - あなた自身のロックを手動で放棄する必要がなくなります(複数のコードパスでスパゲッティのようになります)。 –

+2

もう27人の賛成投票で、既存のユーザーはいないが、いくつかの権威のある情報源へのリンクがあるといいだろう。 –

関連する問題