2013-04-21 90 views
0

你將如何去保護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'。

回答

0

如果確實這是由cocos2d安排的'更新',即使您在同一更新週期中有多個訪問器,它們也不會同時訪問 - AFAIK cocos2d在單個線程上運行。

+0

問題在於其他地方,那麼,因爲它的所有cocos2d預定更新。 UIGestures線程安全嗎?這可能是問題所在 – Clev3r 2013-04-22 02:17:54