C# 휘발성 클래스를 이해하려고합니다.Volatile.Read/Write에 대한 이해
이 읽었 같이
Volatile.Write
메소드 호출 시점에 가 기록 될 위치의 값을 강제로. 또한 이전의 모든 프로그램 주문 로드 및 저장은 Volatile.Write 호출 전에 발생해야합니다.Volatile.Read
메서드는 호출 할 때 에서 읽을 위치의 값을 강제로 지정합니다. 또한 이후 프로그램 주문로드에서는 을로드하고 Volatile.Read를 호출 한 후 저장해야합니다.m_flag
에 쓰기를 시작하기 전에internal sealed class ThreadsSharingData { private Int32 m_flag = 0; private Int32 m_value = 0; // This method is executed by one thread public void Thread1() { // Note: 5 must be written to m_value before 1 is written to m_flag m_value = 5; Volatile.Write(ref m_flag, 1); } // This method is executed by another thread public void Thread2() { // Note: m_value must be read after m_flag is read if (Volatile.Read(ref m_flag) == 1) Console.WriteLine(m_value); } }
CPU가
Volatile.Write(ref m_flag, 1);
전에 명령을 기다립니다 :
그의 경우에 의미인가?
스레드 동기화에 도움이되는 방법은 무엇입니까?
약한 메모리 모델이있는 프로세서에서만 의미가 있습니다. ARM 코어 만 남았습니다. 적절한 동기화를위한 것이 아니라 * 동기화없이 스레드 안전 코드를 작성하는 것은 매우 진보 된 개념입니다. 그렇지 않으면 [이 질문] (http://stackoverflow.com/questions/15039188/volatile-vs-volatileread-write)에서 이미 잘 설명되어 있습니다. –