Информация об изменениях

Сообщение Re[4]: [CodeJam] Code review, план действий по исправлению от 19.04.2016 19:42

Изменено 19.04.2016 20:05 Sinix

Здравствуйте, AndrewVK, Вы писали:

Добавил params в перегрузку AddRange(T[]) + добавил InterlockedOperations.Update() для lock-free обновления поля.

InterlockedOperations теперь поддерживает все типы, что поддерживают методы в interlocked (вытащил в T4 шаблон), тесты добавил.

Такая просьба — посмотри код в InterlockedOperations Вроде всё правильно, но проверить никогда не помешает.
Re[4]: [CodeJam] Code review, план действий по исправлению
Здравствуйте, AndrewVK, Вы писали:

Добавил params в перегрузку AddRange(T[]) + добавил InterlockedOperations.Update() для lock-free обновления поля.

InterlockedOperations теперь поддерживает все типы, что поддерживают методы в interlocked (вытащил в T4 шаблон), тесты добавил.

Такая просьба — посмотри код в InterlockedOperations Вроде всё правильно, но проверить никогда не помешает.

+ есть мысль добавить хелпер для bool-флагов, что-то типа
        //A simple method that denies reentrancy.
        static bool UseResource()
        {
            //0 indicates that the method is not in use.
            if(0 == Interlocked.Exchange(ref usingResource, 1))
            {
                Console.WriteLine("{0} acquired the lock", Thread.CurrentThread.Name);

                //Code to access a resource that is not thread safe would go here.

                //Simulate some work
                Thread.Sleep(500);

                Console.WriteLine("{0} exiting lock", Thread.CurrentThread.Name);

                //Release the lock
                Interlocked.Exchange(ref usingResource, 0);
                return true;
            }
            else
            {
                Console.WriteLine("   {0} was denied the lock", Thread.CurrentThread.Name);
                return false;
            }
        }
    }

из MSDN..

Юзинг тут не подходит в принципе, остаётся такой вариант:
InterlockedOperations.NonReentrant(ref intFlagField, ()=>SomeCode()); // тип флага только int, на всякий уточняю :)
, пойдёт?

Имя метода мне не нравится, есть идея как сделать лучше — велкам!