在@synchronized
内执行一个块似乎否定了锁定。
- (void)method {
@synchronized(self) {
if(ivar == nil) {
ivar = [myBlock() retain];
}
}
}
实例变量ivar
未写入任何其他位置。
我发现块myBlock
有时会在我的应用程序中执行两次。
这怎么可能发生?如何避免这样做真正的工作锁?
答案 0 :(得分:0)
也许你可以在街区内移动锁定。
答案 1 :(得分:0)
锁定工作正常,因为synchronized
仅锁定线程,并且同一个线程正在访问该区域两次。问题是,在某些情况下myBlock
在内部执行。