정적 멤버가있는 C# 클래스가 있는데,이 클래스는 여러 스레드에서 읽혀 하나의 스레드로 작성됩니다.C# 스레드 안전 정적 멤버
내가 아는 한 Uint64는 모든 시스템에서 원자 적 연산이 아니므로 스레드 안전성을 수동으로 보장해야합니다.
이 작업을 수행하는 방법에 대한 아이디어가 몇 가지 있습니다.
C++에서 std :: atomic처럼 원자 랩퍼 클래스와 함께 사용하십시오. C#에서 구현 된 비슷한 것이 있습니까?
정적 필드와 함께 휘발성 수정 기호를 사용하십시오. 그러나 이것은 허용되지 않습니다. 왜?
private static object tick_time_lock; private static UInt64 _currentTickTime; public static UInt64 CurrentTickTime { get { return _currentTickTime; } set { lock (tick_time_lock) { _currentTickTime = value; } } }
이이 필드를 스레드 안전하고 올바른 방법입니다
는 드디어 다음나요?
그렇지만 스레드 설정이 많으면 속도가 느려집니다. 경쟁 조건도있을 것입니다. 예를 들어, 값을 ... 1로 업데이트하면 다음 스레드가이 값을 2로 업데이트 할 수 있지만 4 번째로 업데이트하면 ... 4와 3은 경쟁 조건으로 인해 나중에 들어올 수 있으며 마지막으로 최신 값. BTW, tick_time_lock 개체를 새로 작성해야합니다. –
['Interlocked] (http://msdn.microsoft.com/en-us/library/vstudio/system.threading.interlocked (v = vs.110) .aspx) 유틸리티 클래스를 찾고있을 수 있습니다. – millimoose