对于实时游戏,在线程之间共享对象的最佳实践是什么?

时间:2010-12-01 20:56:35

标签: iphone objective-c multithreading

我想创建一个实时游戏。游戏将有一个模型,将定期更新......

- (void) timerTicks {
    [model iterate];
}

与所有游戏一样,我将恢复用户输入事件和触摸。作为回应,我需要更新模型....

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [model updateVariableInModel];
}

所以有两个主题:

  1. 来自计时器。经常迭代模型
  2. 来自UI线程。根据用户输入更新模型
  3. 两个线程都将在模型中共享变量。

    在线程之间共享对象并避免多线程问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

使用@synchronized关键字锁定需要在线程中共享的对象。

锁定所有对象的简单方法如下:

 -(void) iterate
 {
     @synchronized(self)
     {
         // this is now thread safe
     }         
 }

 -(void) updateVariableInModel
 {
     @synchronized(self)
     {
         // use the variable as pleased, don't worry about concurrent modification
     }
 }

有关objective-c中线程的更多信息,请转到here

另请注意,您必须同时锁定同一个对象,否则锁本身就没用了。

相关问题