Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
LinkedHashMap в эффекте
#11
Спасибоу за разъяснения, в дальнейшем заюзаю конкурент хеш мэп, когда сделаю возможность эффектам: "Данный эффект может быть наложен одновременно только на одну/две/три и т.д. целей."
Быстро, оперативно и чётко запуляли ответами, класс ;D.
Ответ
#12
Ты пытаешься реализовать что-то подобное радару из ревелейшен ? Интересно просто Smile
Ответ
#13
nn03 Написал:Ты пытаешься реализовать что-то подобное радару из ревелейшен ? Интересно просто Smile

Black Mark - метит мудилу. Следующее использовании Shadow Step перенесёт вас к отмеченной цели... etc.
Black List - позволяет метить до трёх целей подряд.

А потом мы можем переместиться к любой из этих трёх целей. Мапа нужна была для второй абилы.
Ответ
#14
finfan Написал:Black Mark - метит мудилу. Следующее использовании Shadow Step перенесёт вас к отмеченной цели... etc.
Black List - позволяет метить до трёх целей подряд.

А потом мы можем переместиться к любой из этих трёх целей. Мапа нужна была для второй абилы.

ухты прикольно, но тут веть есть много нюансов, расстояние, текстуры ...
Ответ
#15
nn03 Написал:ухты прикольно, но тут веть есть много нюансов, расстояние, текстуры ...

Эти ньюансы я уже пробил как следует и внёс необходимые правки, теперь, обидчика AW - будет ждать акт возмездия.
Ответ
#16
finfan Написал:Эти ньюансы я уже пробил как следует и внёс необходимые правки, теперь, обидчика AW - будет ждать акт возмездия.

как доделаешь , сними мув, интересно посмотреть очень Smile
Ответ
#17
Лично мое мнение по поводу любых коллекций и многопоточности.
используйте блокировки, причем использовать их нужно там где существует возможность вхождения нескольких потоков в чтение и запись.
А использование Concurrent на мой взгяд - костыль. Ибо при записи создается копия коллекции... что при определенных обстоятельствах может повести за собой баги или даже дюп.
Код:
Чтение
locker.enterReadLock();
Тут операции чтения из коллекции
locker.exitReadLock();

Запись
locker.enterWriteLock();
Тут операции записи коллекции (добавление\удаление)
locker.exitWriteLock();

Не знаю как в java но в c# реализация локера следующая
Код:
using System.Threading;

namespace Utils.Locks
{
    public sealed class ReadWriteLockerPro
    {

        private ManualResetEvent writeLock = new ManualResetEvent(true);
        private ManualResetEvent readLock = new ManualResetEvent(true);
        private int readers = 0;

        public void enterWriteLock()
        {
            readLock.WaitOne();
            writeLock.Reset();
        }
        public void exitWriteLock()
        {
            writeLock.Set();
        }
        public void enterReadLock()
        {
            writeLock.WaitOne();
            readLock.Reset();
            Interlocked.Increment(ref readers);
        }
        public void exitReadLock()
        {
            Interlocked.Decrement(ref readers);
            if (readers == 0)
                readLock.Set();
        }
    }
}
Суть - Читатели могут(параллельно) читать до тех пор пока в очередь не зайдет писатель. Если в момент вхождения писателя не все читатели закончили чтение писатель ждет пока читатели закончат чтение, Но новые читатели уже не могут читать. Как читатели закончили - писатель начинает писать. Если другой писатель (Практически исключено. Если так происходит - значит ваша архитектура - х**ня.) входит, то он ждет пока предыдущий писатель закончит писать. Как только писатели закончили писанину - разрешаем читателям, которые были в очереди - читать дальше.
PS удалять элементы коллекции в цикле итерации по самой же коллекции - нельзя. Выход - те элементы которые нужно удалить в цикле помещаем в коллекцию удаления. Прим ArrayList<item> deletedList;
и потом уже после цикла главной коллекции - добавляем цикл удаления если deletedList.count > 0. и в нем уже удаляем элементы из главной коллекции а после deletedList.clear();
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)