Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 20027|Risposta: 0

[Fonte] La parola chiave C# lock segna un blocco di istruzioni come area critica ottenendo un mutex per un dato oggetto, eseguendo l'istruzione, ma...

[Copiato link]
Pubblicato su 31/12/2015 17:51:01 | | |
La parola chiave lock segna un blocco di istruzioni come zona critica prendendo un mutex per un dato oggetto, eseguendo l'istruzione e poi rilasciando il lock.

L'istruzione lock utilizza fondamentalmente Monitor.Enter e Monitor.Exit, cioè Monitor.Enter(this) viene eseguito quando lock(this) viene eseguito, e Monitor.Exit(this) viene eseguito alla fine della braccia a curlo. Qual è il suo significato, per qualsiasi oggetto, la prima parte della memoria è l'indirizzo di tutti i metodi, e la seconda parte è un indice. Indica un SyncBlock nell'area SyncBlock Cache del CLR. Cosa significa? Cioè, quando esegui Monitor.Enter(Object), se il valore indice dell'oggetto è negativo, seleziona un SyncBlock dalla SyncBlock Cache e inserisci il suo indirizzo nell'indice dell'oggetto. Questo completa il blocco segnato da oggetto, e gli altri thread vogliono eseguire di nuovo l'operazione Monitor.Enter(oggetto), che otterrà un indice con un oggetto positivo, e poi aspettare. Fino a quando l'indice non diventa negativo, cioè il thread usa Monitor.Exit(object) per trasformare l'indice in negativo.

Cosa devi tenere d'occhio quando usi la serratura:
1.lock non può bloccare il valore nullo Un oggetto può puntare a nullo, ma il nullo non deve essere rilasciato. (Vedi anche: Comprendere il Null Completo)
2. Il blocco non può bloccare il tipo di stringa, anche se è anche un tipo di riferimento. Perché il tipo di stringa è "hovered" dal CLR
Questo significa che esiste una sola istanza di una determinata stringa in tutto il programma, e lo stesso oggetto rappresenta quel testo in tutti i thread di tutti i domini applicativi in esecuzione. Pertanto, finché un lock viene posto su una stringa con lo stesso contenuto in qualsiasi parte del processo applicativo, tutte le istanze di quella stringa nell'applicazione saranno bloccate. Pertanto, è meglio bloccare membri privati o protetti che non saranno sostenuti.
3.locklock: l'oggetto è il confine di memoria di un blocco di programma
4. Il tipo di valore non può essere bloccato, perché il testo precedente "oggetto è rilasciato" in rosso, e il tipo di valore non è un tipo di riferimento
5.lock evita di bloccare tipi o oggetti pubblici non controllati dal programma.
Ad esempio, se l'istanza è accessibile al pubblico, il lock(this) può essere problematico perché il codice non controllato può anche bloccare l'oggetto. Questo può portare a deadlock, in cui due o più thread aspettano di rilasciare lo stesso oggetto. Bloccare i tipi di dati pubblici (a differenza degli oggetti) può causare problemi per lo stesso motivo.
Quando si usa lock(this), il valore della variabile membro di classe può essere modificato dal metodo che non si trova nella zona critica

Scenario applicativo: Viene spesso utilizzato per prevenire eccezioni incerte nel valore delle variabili pubbliche causate da operazioni multithreaded, al fine di garantire la sicurezza delle operazioni









Precedente:Win8 avvia il servizio SQL Server 2012
Prossimo:[Speed] Scanner a porte aperte a segmenti IP per velocità di scansione veloce!!
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com