Мне нужно сделать существующий поток приложений безопасным. Учитывая обстоятельства (см. Ниже), я решил использовать один единственный 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?
Немного предыстории:
Я работаю над проектом, где бизнес-объекты-носители данных подвергаются через .NET Remoting. Однако эти классы данных не являются сериализуемыми, но MarshalByRef-s. Это означает, что ВСЕ клиенты на самом деле читают/пишут одни и те же бизнес-объекты. Это невозможно изменить, оно вырезано из камня. Надежда на безопасность потоков заключается в том, что эти удаленные бизнес-объекты доступны только для чтения в глазах удаленных клиентов (они думают, что они заполняют множество списков), и все операции записи прекрасно разделяются на выделенный фасад. Я ожидаю, что редкие записи и частые чтения. Бизнес-объекты очень связаны, они очень «графические».
черт возьми, вы должны действительно получить новую работу =) ... –
Обратите внимание, что MSDN (http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx) рекомендует использовать ReaderWriterLockSlim вместо ReaderWriterLock. –