您将如何保护 cocos2d 中的共享资源,以便一次只允许一个类或方法访问或更改它?我最初的想法是设置一个处理锁定/解锁协调的类,如下所示:
- (BOOL)requestLock {
if (self.lockAvailable == YES) {
self.lockAvailable = NO;
return YES;
}
return NO;
}
- (void)returnLock:(CGFloat)time {
self.timer = 0;
self.timeToUnlock = time;
}
- (void)update:(CGFloat)dt {
self.timer += dt;
if (self.timer > self.timeToUnlock) {
self.lockAvailable = YES;
}
}
@end
但它似乎并没有按预期工作。在我的一个类获得锁后,它调用执行一些操作,然后returnLock
该操作预计会采取多长时间。然而,结果是出乎意料的,因为似乎任何其他尝试请求锁定的类都可以这样做,而不管在解锁之前提供的时间。我这里有什么缺陷吗?
另一方面:这最终会在某个时候变得非常低效吗?我有大约 3 个班级试图在每次更新时访问相同的资源。每次他们一遍又一遍地调用“requestLock”。