기존 앱 스레드를 안전하게 만들어야합니다. (아래 참조) 상황에 따라 비즈니스 개체의 전체 그래프에 하나의 ReaderWriterLock을 사용하기로 결정했습니다. 모든 메소드/속성을 다음과 같이해야합니다.NET에서 선언적 스레드 안전
public int MyReadOperation(string inputParam)
{
rwLock.AcquireReaderLock(10000);
try
{
// do all read operations
...
}
finally
{
rwLock.ReleaseReaderLock();
}
}
public void MyWriteOperation(string input)
{
rwLock.AcquireWriterLock(10000);
try
{
// do all write operations
...
}
finally
{
rwLock.ReleaseWriterLock();
}
}
하지만 커버하는 방법의 엄청난 금액을 가지고 있고 복사/붙여 넣기의 아이디어에서 기겁을하고있다. MethodImplAttribute에서 영감을 , 나는 행동하라 위의 코드로 동안이 같은 코드를 선호하는 것 : 스레드 실행을 중단 할 수있는 방법이 있나요
[ReadOperation]
public int MyReadOperation(string inputParam)
{
// do all read operations
...
}
[WriteOperation]
public void MyWriteOperation(string input)
{
// do all write operations
...
}
전/속성이나 방법에 입력하고 스레드를 추가 한 후 - 안전 예방 조치? 또는 어떻게 든 C#의 기능적 언어 기능을 활용하여 메서드의 생산 본문을 일반 "ReaderWriterLock"프레임 "aquiring"에 포함 할 수 있습니까?
배경 비트 : 나는 데이터 캐리어 비즈니스 오브젝트는 .NET Remoting을 통해 노출되는 프로젝트를 진행하고
. 그러나 이러한 데이터 클래스는 직렬화 가능하지 않지만 MarshalByRef-s입니다. 이는 모든 클라이언트가 실제로 동일한 비즈니스 객체를 읽고 쓰는 것을 의미합니다. 이것은 바뀔 수 없으며, 돌로 새겨 져 있습니다. 스레드 안전성에 대한 희망은 이러한 원격 비즈니스 객체가 원격 클라이언트 (클라이언트가 많은 목록을 반복한다고 생각하는)에게 읽기 전용이고 모든 쓰기 작업이 전용 외관으로 잘 분리되어 있다는 것입니다. 희소 한 쓰기 및 빈번한 읽기가 예상됩니다. 비즈니스 개체는 고도로 연결되어 있으며 매우 그래픽 적입니다.
정말 새로운 일을해야합니다 =) ... –
MSDN (http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx)은 ReaderWriterLockSlim ReaderWriterLock 대신. –