在我的 cocos2d 游戏中,我有一些必须销毁的球,并且有 2 个线程彼此并发,第一个线程将球添加到 NSMutablearray,第二个线程迭代此数组并为每个线程调用释放方法球,我已将数组的每个操作放入 @synchronized(array) 的同步块(synchronized block)中,但它不受影响,并且每次在同步块(synchronized block)应用程序中都会抛出异常 __NSArrayM 在枚举时发生突变: 也许还有其他方法来同步线程?
最佳答案
由于您是从一个线程添加对象并使用另一个线程迭代同一数组,因此对这部分代码进行多线程处理似乎毫无意义。
原因是你can not modify an array while iterating对其进行处理,无论您是在同一个线程还是多个线程中执行此操作。
通过使用两个数组,每个线程一个,并且每个线程执行相同的任务,您很可能会获得更好的结果:两个数组都在添加对象,然后都迭代其一半的对象。如何分割对象取决于您,它可以基于屏幕坐标(屏幕分割)或其他一些条件(即每个线程处理的对象的平衡数量)。
关于multithreading - Cocos2d 应用程序的线程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9314781/