[Flags]
public enum MySet{None=0,Val1=1,Val1=2,Val3=4}
И нужны функции которые будут работать в многопоточном коде. Вот они
private MySet mySet;
public bool IsSet(MySet s)
{
return mySet & s == s;
}
public void OnSet(MySet s)
{
mySet += s;
}
public void OfSet(MySet s)
{
mySet -= s;
}
Как такое сделать в многопоточной среде? Или можно оставить так и проблем не будет?
Re: Использование множеств в многопоточном приложении
Здравствуйте, Аноним, Вы писали:
А>Есть множество
… А>И нужны функции которые будут работать в многопоточном коде. Вот они
… А>Как такое сделать в многопоточной среде? Или можно оставить так и проблем не будет?
Нужно использовать тег [c#], битовые опрерации сложения и умножения и, например, lock.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Использование множеств в многопоточном приложении
От:
Аноним
Дата:
08.11.10 07:42
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Аноним, Вы писали:
А>>Есть множество _FR>… А>>И нужны функции которые будут работать в многопоточном коде. Вот они _FR>… А>>Как такое сделать в многопоточной среде? Или можно оставить так и проблем не будет?
_FR>Нужно использовать тег [c#], битовые опрерации сложения и умножения и, например, lock.
Извините за наглость, а код не покажете? Только начинаю писать и не хочется на грабли наступать в такой мелочи
Re[3]: Использование множеств в многопоточном приложении
Здравствуйте, Аноним, Вы писали:
А>>>Есть множество _FR>>… А>>>И нужны функции которые будут работать в многопоточном коде. Вот они _FR>>… А>>>Как такое сделать в многопоточной среде? Или можно оставить так и проблем не будет? _FR>>Нужно использовать тег [c#], битовые опрерации сложения и умножения и, например, lock.
А>Извините за наглость, а код не покажете? Только начинаю писать и не хочется на грабли наступать в такой мелочи
Здравствуйте, Аноним, Вы писали:
А>>>Извините за наглость, а код не покажете? Только начинаю писать и не хочется на грабли наступать в такой мелочи
_FR>>Типы перечислений (руководство по программированию в C#) _FR>>lock Statement (C# Reference)
А>Спасибо. А подскажите. Есть я делаю Read-Only свойство то в методе get мне надо использовать lock?
Это зависит от того, как реализовано get. Что бы лишний раз не думать, можно и залочить.
Help will always be given at Hogwarts to those who ask for it.
Re[6]: Использование множеств в многопоточном приложении
От:
Аноним
Дата:
08.11.10 08:12
Оценка:
_FR>Это зависит от того, как реализовано get. Что бы лишний раз не думать, можно и залочить.
Понял. А если я просто читаю поле (не свойство) то его не нужно лочить?
Re[7]: Использование множеств в многопоточном приложении
Здравствуйте, Аноним, Вы писали:
_FR>>Это зависит от того, как реализовано get. Что бы лишний раз не думать, можно и залочить. А>Понял. А если я просто читаю поле (не свойство) то его не нужно лочить?
В случае с вашим кодом (использование enum) можно использовать Interlocked операции для записи изменений и обычное чтение без дополнительных блокировок.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[7]: Использование множеств в многопоточном приложении
Здравствуйте, Аноним, Вы писали:
А>Понял. А если я просто читаю поле (не свойство) то его не нужно лочить?
Если его размер равен 4-м байт(как в Вашем примере), то не нужно. Даже если кто-то будет его писать в этот момент, ничего страшного не произойдёт. Стоит только пометить переменную как volatile.
"Нормальные герои всегда идут в обход!"
Re: Использование множеств в многопоточном приложении
Здравствуйте, Аноним, Вы писали:
А>Как такое сделать в многопоточной среде? Или можно оставить так и проблем не будет?
Метод IsSet — потокобезопасен, т.к. там присутствует только одно чтение, а оно безопасно.
Методы OnSet, OfSet — непотокобезопасны, т.к. там присутствует как чтение, так и запись и между ними может вклиниться другой поток. Поэтому, тело метода луче обрамить в lock(_lock), а _lock нужно объявить членом класса (private readonly object _lock = new object().
Сами методы OnSet, OfSet реализованы неправильно, для манипуляции flag-ами нужно использовать битовые операции.
Re[8]: Использование множеств в многопоточном приложении
Здравствуйте, TK, Вы писали:
_FR>>>Это зависит от того, как реализовано get. Что бы лишний раз не думать, можно и залочить. А>>Понял. А если я просто читаю поле (не свойство) то его не нужно лочить? TK>В случае с вашим кодом (использование enum) можно использовать Interlocked операции для записи изменений и обычное чтение без дополнительных блокировок.
А разве можно на Interlocked сделать добавление/удаление флага?
Help will always be given at Hogwarts to those who ask for it.
Re[8]: Использование множеств в многопоточном приложении
Здравствуйте, TK, Вы писали:
А>>Понял. А если я просто читаю поле (не свойство) то его не нужно лочить?
TK>В случае с вашим кодом (использование enum) можно использовать Interlocked операции для записи изменений и обычное чтение без дополнительных блокировок.
А можно пример использоания interlocked в применении к данному случаю?
Re[2]: Использование множеств в многопоточном приложении
Здравствуйте, Lloyd, Вы писали:
А>>Как такое сделать в многопоточной среде? Или можно оставить так и проблем не будет? L>Метод IsSet — потокобезопасен, т.к. там присутствует только одно чтение, а оно безопасно.
А если у енама underlying-тип — восьмибайтный, тоже будет "безопасно"?
Help will always be given at Hogwarts to those who ask for it.
Re[3]: Использование множеств в многопоточном приложении
Здравствуйте, _FRED_, Вы писали:
L>>Метод IsSet — потокобезопасен, т.к. там присутствует только одно чтение, а оно безопасно.
_FR>А если у енама underlying-тип — восьмибайтный, тоже будет "безопасно"?
А где ты нашел восьмибайтный enum?
Re[3]: Использование множеств в многопоточном приложении