2010-02-25 8 views

Odpowiedz

3

co prosicie nazywa Software Transactional Memory. Ponieważ obecnie jest to otwarty obszar badań i nie ma obecnie natywnej obsługi języka C#, lepiej użyć parametru existing synchronization options for C#, na przykład słowa kluczowego lock, monitorów, uchwytów oczekiwania itp.

Jeśli naprawdę potrzebujesz zaawansowanych funkcji transakcyjnych, jest dużo library implementations, na przykład < edycja> SXM firmy Microsoft Research STM.NET </edycja>.

+0

Wiem, że jest to stara odpowiedź (i pytanie), ale właśnie zastanawiałem się nad transakcjami C# dla operacji w pamięci i znalazłem to. Jednak linki do STM.NET wydają się być martwe. Czy projekt został przerwany? Czy istnieje alternatywa? – Shaamaan

+1

@Shaamaan: Link do Wikipedii ma również listę implementacji: https: // en.wikipedia.org/wiki/Software_transactional_memory#C.23 – Heinzi

0

Nie ma SQL-like transactioning dla C# obiektów, ale czy to dlatego, że masz gwintowania problemy, należy użyć lock:

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

To po prostu czyści listę, ale zapewnia, że ​​nie może być modyfikowana przez kolejny wątek w tym samym czasie.

1

Dla miłej dyskusji, jak zrealizować transakcję w OOP, spójrz na tę discussion. Tam podświetlony jest wzorzec memento i stan w celu osiągnięcia zachowania transakcyjnego (wśród innych metod).

3

Możesz być zainteresowany Software Transactional Memory. Istnieje jedna implementacja w świecie .NET o nazwie STM.NET.

Software transakcyjna pamięci (STM.NET) jest mechanizmem do efektywnego izolacji wspólnego państwa. Programator wyznacza region kodu jako działający w ramach transakcji, która jest "atomowa" i "izolowana" od innego kodowanego kodu działającego równolegle.

Oto blog zespołu Microsoft STM.NET: http://blogs.msdn.com/stmteam/

+0

Masz rację co do STM, ale nie zapominaj, że STM jest nadal w fazie badań, rozwoju i nie użyłbym to w oprogramowaniu produkcyjnym. – Steven

1

Zobacz Software Software Transactional Memory (STM.NET).

Nie udało się do .NET 4, ale jest dostępny jako osobny plik do pobrania

1

Wystąpił Interesting article na blogu Joe Duffy o próbie zrobienia transakcyjne pamięci w MS. Gdybym to podsumował, powiedziałbym: Zrób to sam, jeśli jest to dla zabawy.

0

Możesz użyć TransactionScope Class.

+0

To jest całkowicie niepoprawne, TransactionScope jest używane tylko dla DB – Idan

+0

Humm .. no. Może być używany do wszystkiego, co implementuje IEnlistmentNotification – vtortola

Powiązane problemy