У меня есть класс С# со статическим членом, который читается из нескольких потоков и записывается в один поток.
Насколько я знаю, чтение и запись Uint64 не является атомарной операцией во всех системах, поэтому я должен вручную гарантировать безопасность потоков.
У меня было несколько идей, как это сделать.
Сделайте это с атомным классом-оболочкой, например std::atomic в С++. Есть ли что-то подобное на C#?
Используйте модификатор volatile со статическим полем. Однако это не допускается. Почему?
Наконец я сделал следующее:
private static object tick_time_lock; private static UInt64 _currentTickTime; public static UInt64 CurrentTickTime { get { return _currentTickTime; } set { lock (tick_time_lock) { _currentTickTime = value; } } }
Это правильный способ сделать это поле потокобезопасным?
Interlocked
служебный класс. - person millimoose   schedule 26.11.2013