在@synchronized中执行一个块似乎会取消锁。
- (void)method {
@synchronized(self) {
if(ivar == nil) {
ivar = [myBlock() retain];
}
}
}实例变量ivar不会写入任何其他位置。
我观察到,在我的应用程序中,块myBlock有时会被执行两次。
这怎么可能发生呢?如何避免这种情况,并做一个真正的工作锁?
发布于 2011-10-04 21:12:45
这个锁工作得很好,因为synchronized只锁定线程,并且同一个线程访问该区域两次。问题是,在某些情况下,myBlock会在内部执行自己。
发布于 2011-09-14 20:34:19
也许你可以把锁移到区块里面。
https://stackoverflow.com/questions/7416353
复制相似问题