一度に 1 つのクラスまたはメソッドのみがアクセスまたは変更できるように、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
しかし、期待どおりに機能していないようです。私のクラスの 1 つがロックを取得した後、何らかのアクションを実行し、returnLock
そのアクションにかかる時間が予想されます。ただし、ロックを要求しようとする他のクラスは、ロックを解除する前に提供された時間に関係なく要求できるように見えるため、結果は予想外です。ここに何らかの欠陥がありますか?
別の注意: これはある時点で恐ろしく非効率になるのでしょうか? 更新ごとに同じリソースにアクセスしようとしているクラスが約 3 つあります。彼らは毎回「requestLock」を何度も何度も呼び出しています。