2010-02-25 2 views

ответ

3

Что вы спрашиваете, называется Software Transactional Memory. Поскольку в настоящее время это открытая область исследований, и на данный момент нет родной поддержки языка C#, вам может быть полезно использовать existing synchronization options for C#, например ключевое слово lock, мониторы, кнопки ожидания и т. Д.

Если вы действительно нужны передовые транзакционные функции, существует много library implementations, например, < Редактировать> SXM от Microsoft Research STM.NET </edit>.

+0

Я знаю, что это старый ответ (и вопрос), но теперь я просто интересовался транзакциями C# для операций с памятью и нашел это. Однако ссылки на STM.NET кажутся мертвыми. Был ли проект прекращен? Есть ли альтернатива? – Shaamaan

+1

@Shaamaan: Ссылка Wikipedia также имеет список реализаций: https: // en.wikipedia.org/wiki/Software_transactional_memory#C.23 – Heinzi

0

Там нет SQL-подобного transactioning для C# объектов, но если это потому, что у вас есть поточная проблема, вы должны использовать lock:

lock (myList) 
{ 
    if (myList.Count > 0) 
     myList.Clear(); 
} 

Это просто очищает список, но гарантирует, что он не может быть изменен другой поток одновременно.

1

Для приятного обсуждения, как реализовать транзакцию в ООП, посмотрите на это discussion. Там шаблон памяти и состояния подсвечивается для достижения транзакционного поведения (среди других методов).

3

Возможно, вас заинтересует Software Transactional Memory. В мире .NET существует одна реализация, называемая STM.NET.

Программное обеспечение транзакционной памяти (STM.NET) представляет собой механизм для эффективного изоляции общего состояния. Программист демаркирует область кода как действующую в рамках транзакции, которая является «атомарной» и «изолированной» от другого транзакций, выполняемых одновременно.

Вот блог команды Microsoft STM.NET: http://blogs.msdn.com/stmteam/

+0

Вы правы относительно STM, но не забудьте отметить, что STM все еще находится в исследовании, разработке, и я бы не использовал это в производственном программном обеспечении. – Steven

1

Взгляните на программную транзакционную память (STM.NET).

Он не делал это в .Net 4, но доступен в виде отдельной загрузки

1

Был Interesting article на блоге Джо Даффи о попытке сделать транзакционной памяти в MS. Если бы я подвел итог, я бы сказал: «Сделай это сам, если это будет весело.

0

Вы можете использовать TransactionScope Class.

+0

Это абсолютно неверно, TransactionScope используется только для DB – Idan

+0

Humm .. no. Он может использоваться для всего, что реализует IEnlistmentNotification – vtortola

Смежные вопросы