2014-07-24 25 views
1

在实现惰性线程安全的getter时,我遇到了一个有趣的(在我看来)的情况,我不得不使用@synchronized节来声明和调用块。以下是代码的简化版本:在@synchronized节中声明的块是否同步?

- (void) someMethod 
{ 
    @synchronized(self) { 
     [self doSomethingWithCompletionBlock:^{ 
      // Are we synchronized here? 
     }]; 
    } 
} 

我们是否在块内部同步(自我)?如果是这样,块捕获(就内存管理而言)自我指针?

回答

2

块本身不会同步。

但是,如果您在同一个线程上同步执行此块,它仍然会在现有的同步块内运行。

如果OTOH将该块传递给另一个线程,它将不再同步。

相关问题