5
하나의 스레드에서 불변 개체가 new'ed되고 두 번째 스레드에서 공유되면 (예 : 공유 개체의 필드) 두 번째 스레드가 동기화되지 않아야합니까?C#의 메모리 장벽을 통해 불변 개체에 액세스해야합니까?
Thread1:
=========
x = new SomeObject()
Thread2
=========
if (x != null)
x.DoSomething()
x.DoSomething() 전에 메모리 장벽이 있어야합니까? 첫 번째 스레드에서 x에 대한 할당이 두 번째 스레드에서 결코 보이지 않을 수 있습니까? .NET의 안전한 게시 패턴은 무엇입니까?
확인. .NET에 대한 안전한 출판 관련 정보/문서가 있습니까? – drr
나는 당신이하고 싶은 일에 달려 있다고 생각합니다. MSDN의 Parallel Patterns 라이브러리를 살펴 보겠습니다. 그 외에도, 당신은 거의 동기화 프리미티브를 가지고 있습니다. Joe Duffy의 웹 로그를 확인할 수도 있습니다. 그는 잠금과 병렬 데이터 액세스의 미세한 점에 대해 꽤 많이 이야기합니다. –
필자는 이렇게 말하는 문서를 모르지만 쓰기가 안전하고 읽기에는 메모리 펜스가 필요합니다. 위에서 언급 한 여러 가지 방법을 통해 얻을 수있는 것은 Lock, volatile, Thread.VolatileRead/Write, MemoryBarrier에 대한 명시 적 호출입니다. 자세한 내용은 [C#의 스레딩] (http://www.albahari.com/threading/part4.aspx#_Memory_Barriers_and_Volatility)을 참조하십시오. – BrandonAGr