2010-02-25 12 views

risposta

3

quello che chiedete è chiamato Software Transactional Memory. Dal momento che questo è attualmente uno spazio aperto di ricerca e non v'è alcun supporto linguaggio C# nativa in questo momento, si potrebbe essere meglio utilizzare il existing synchronization options for C#, come ad esempio la parola chiave lock, monitor, attendere maniglie, ecc

Se davvero sono necessarie funzionalità transazionali avanzate, ci sono un sacco di library implementations, ad esempio, < modifica> SXM di Microsoft Research STM.NET </modifica>.

+0

So che questa è una vecchia risposta (e una domanda), ma mi stavo solo chiedendo delle transazioni C# per le operazioni in memoria, e ho trovato questo. Tuttavia, i collegamenti a STM.NET sembrano essere morti. Il progetto è stato interrotto? C'è un'alternativa? – Shaamaan

+1

@Shaamaan: il link di Wikipedia ha anche un elenco di implementazioni: https: // en.wikipedia.org/wiki/Software_transactional_memory#C.23 – Heinzi

0

Non c'è transactioning SQL-like per C# oggetti, ma se questo a causa di problemi di threading, è necessario utilizzare lock:

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

Questo cancella semplicemente un elenco, ma assicura che non può essere modificato da un altro thread allo stesso tempo.

1

Per una bella discussione su come implementare la transazione in OOP, dai un'occhiata a questo discussion. Lì il memento e lo schema di stato sono evidenziati per ottenere un comportamento transazionale (tra gli altri metodi).

3

Potresti essere interessato a Software Transactional Memory. Esiste un'implementazione nel mondo .NET, denominata STM.NET.

Software Transactional Memory (STM.NET) è un meccanismo per un efficiente isolamento di stato condiviso. Il programmatore demarca una regione del codice come operante all'interno di una transazione che è "atomica" e "isolata" da altro codice transazionale in esecuzione contemporaneamente.

Ecco il blog del team di Microsoft STM.NET: http://blogs.msdn.com/stmteam/

+0

Hai ragione su STM, ma non dimenticare di notare che STM è ancora in ricerca, sviluppo e non vorrei usare nel software di produzione. – Steven

1

Dai un'occhiata alla memoria transazionale del software (STM.NET).

Non ce l'ha fatta in .Net 4, ma è disponibile come download separato

1

C'è stato un Interesting article sul blog di Joe Duffy circa il tentativo di fare memoria transazionale a MS. Se dovessi riassumerlo, direi: fallo da solo se è per divertimento.

0

È possibile utilizzare TransactionScope Class.

+0

questo è completamente errato, TransactionScope è usato solo per DB – Idan

+0

Humm .. no. Può essere utilizzato per tutto ciò che implementa IEnlistmentNotification – vtortola