Синхронизация потоков для приложения Cocos2d - PullRequest
0 голосов
/ 16 февраля 2012

В моей игре cocos2d у меня есть несколько шариков, которые должны быть уничтожены, и есть два потока, которые параллельны друг другу, первый поток добавляет шары к NSMutablearray, а второй поток выполняет итерацию по этому массиву и вызывает метод release для каждого мяч, я поместил каждую операцию с массивом в синхронизированный блок с @synchronized (массив), но это не влияет, и каждый раз в приложении синхронизированного блока возникает исключение, __NSArrayM был мутирован во время перечисления: может есть другой способ синхронизации потоков?

1 Ответ

1 голос
/ 17 февраля 2012

Поскольку вы добавляете объекты из одного потока и перебираете один и тот же массив с другим потоком, многопоточность этой части кода кажется бессмысленной.

Причина в том, что вы не можетеизмените массив, итерируя по нему , независимо от того, делаете ли вы это из одного и того же потока или из нескольких потоков.

Скорее всего, вы получите лучшие результаты, используя два массива, по одному для каждого потока, икаждый поток выполняет одни и те же задачи: оба добавляют объекты, затем оба перебирают свою половину объектов.То, как вы разделяете объекты, зависит от вас, оно может основываться на координатах экрана (разделение экрана) или каком-либо другом условии (например, балансовом числе объектов, обработанных каждым потоком).

...