Blocchi in lettura/scritturaReader-Writer Locks

La classe ReaderWriterLockSlim consente a più thread di leggere una risorsa contemporaneamente, ma richiede a un thread di rimanere in attesa di un blocco esclusivo per poter scrivere nella risorsa.The ReaderWriterLockSlim class enables multiple threads to read a resource concurrently, but requires a thread to wait for an exclusive lock in order to write to the resource.

È possibile usare una classe ReaderWriterLockSlim nell'applicazione per fornire la sincronizzazione cooperativa tra i thread che accedono a una risorsa condivisa.You might use a ReaderWriterLockSlim in your application to provide cooperative synchronization among threads that access a shared resource. I blocchi vengono acquisiti nella classe ReaderWriterLockSlim stessa.Locks are taken on the ReaderWriterLockSlim itself.

Come per qualsiasi meccanismo di sincronizzazione di thread, è necessario assicurarsi che nessun thread ignori il blocco fornito da ReaderWriterLockSlim.As with any thread synchronization mechanism, you must ensure that no threads bypass the locking that is provided by ReaderWriterLockSlim. A garanzia di ciò, progettare una classe che incapsuli la risorsa condivisa.One way to ensure this is to design a class that encapsulates the shared resource. Questa classe fornisce membri che accedono alla risorsa condivisa privata e che usano una classe ReaderWriterLockSlim privata per la sincronizzazione.This class would provide members that access the private shared resource and that use a private ReaderWriterLockSlim for synchronization. Per un esempio, vedere gli esempi di codice per la classe ReaderWriterLockSlim.For an example, see the code example for the ReaderWriterLockSlim class. ReaderWriterLockSlim è abbastanza efficace da usare per sincronizzare i singoli oggetti.ReaderWriterLockSlim is efficient enough to be used to synchronize individual objects.

Strutturare l'applicazione per ridurre al minimo la durata delle operazioni di lettura e scrittura.Structure your application to minimize the duration of read and write operations. Le operazioni di scrittura lunghe influiscono direttamente sulla velocità effettiva perché il blocco di scrittura è esclusivo.Long write operations affect throughput directly because the write lock is exclusive. Le operazioni di lettura lunghe bloccano i writer in attesa e se almeno un thread è in attesa dell'accesso in scrittura, verranno bloccati anche i thread che richiedono l'accesso in lettura.Long read operations block waiting writers, and if at least one thread is waiting for write access, threads that request read access will be blocked as well.

Nota

.NET Framework.NET Framework include due blocchi in lettura/scrittura, ovvero ReaderWriterLockSlim e ReaderWriterLock.The .NET Framework.NET Framework has two reader-writer locks, ReaderWriterLockSlim and ReaderWriterLock. ReaderWriterLockSlim è consigliato per tutte le nuove fasi di sviluppo.ReaderWriterLockSlim is recommended for all new development. ReaderWriterLockSlim è simile a ReaderWriterLock, ma include regole semplificate per la ricorsione e per l'aggiornamento e il downgrade dello stato del blocco.ReaderWriterLockSlim is similar to ReaderWriterLock, but it has simplified rules for recursion and for upgrading and downgrading lock state. ReaderWriterLockSlim evita molti casi di deadlock potenziale.ReaderWriterLockSlim avoids many cases of potential deadlock. Inoltre, le prestazioni di ReaderWriterLockSlim sono significativamente migliori di ReaderWriterLock.In addition, the performance of ReaderWriterLockSlim is significantly better than ReaderWriterLock.

Vedere ancheSee Also

ReaderWriterLockSlim
ReaderWriterLock
ThreadingThreading
Threading Objects and Features (Oggetti e funzionalità del threading)Threading Objects and Features