Una domanda relativamente minore, ma non sono stato in grado di trovare documentazione ufficiale o opinioni o discussioni sul blog.
In parole povere: quando ho un oggetto privato il cui unico scopo è quello di servire come privato lock
, come posso chiamarlo?
class MyClass
{
private object LockingObject = new object();
void DoSomething()
{
lock(LockingObject)
{
//do something
}
}
}
Come dovremmo nominare LockingObject
qui? Considera anche non solo il nome della variabile ma come appare nel codice durante il blocco.
Ho visto vari esempi, ma apparentemente non ci sono solidi consigli da seguire:
Un sacco di usi di
SyncRoot
(e variazioni come_syncRoot
).- Codice di esempio:
lock(SyncRoot)
,lock(_syncRoot)
- Ciò sembra essere influenzato dall'affermazione equivalente di VB
SyncLock
, laSyncRoot
proprietà che esiste su alcune classi ICollection e parte di un qualche tipo di modello di progettazione SyncRoot (che probabilmente è una cattiva idea) - Essere in un contesto C #, non sono sicuro se vorrei avere un nome VBish. Ancora peggio, in VB la variabile è uguale alla parola chiave. Non sono sicuro se questo sarebbe una fonte di confusione o meno.
- Codice di esempio:
thisLock
elockThis
dagli articoli MSDN: C # lock Statement , VB SyncLock Statement- Codice di esempio:
lock(thisLock)
,lock(lockThis)
- Non sono sicuro se questi sono stati nominati minimamente puramente per l'esempio o meno
- Un po 'strano se lo stiamo usando in una
static
classe / metodo. - EDIT: L'articolo di Wikipedia sui blocchi usa anche questa denominazione per il suo esempio
- Codice di esempio:
Diversi usi di
PadLock
(di involucro variabile)- Codice di esempio:
lock(PadLock)
,lock(padlock)
- Non male, ma il mio unico manzo è che non sorprende che invochi l'immagine di un "lucchetto" fisico che tendo a non associare al concetto astratto di threading .
- Codice di esempio:
Assegnare un nome al blocco in base a ciò che intende bloccare
- Codice di esempio:
lock(messagesLock)
,lock(DictionaryLock)
,lock(commandQueueLock)
- Nell'esempio di pagina MSDN VB SyncRoot, ha un
simpleMessageList
esempio con unmessagesLock
oggetto privato - Non credo sia una buona idea nominare il blocco in base al tipo che stai bloccando ("DictionaryLock") in quanto è un dettaglio dell'implementazione che può cambiare. Preferisco dare un nome al concetto / oggetto che stai bloccando ("messageLock" o "commandQueueLock")
- È interessante notare che raramente vedo questa convenzione di denominazione per bloccare oggetti negli esempi di codice online o su StackOverflow.
- Codice di esempio:
(EDIT) Le specifiche C # nella sezione "8.12 The Lock Statement" hanno un esempio di questo modello e lo nominano
synchronizationObject
- Codice di esempio:
lock(SynchronizationObject)
,lock(synchronizationObject)
- Codice di esempio:
Domanda: Qual è la tua opinione in generale sulla denominazione degli oggetti di blocco privati ?
Di recente, ho iniziato a nominarli ThreadLock
(in modo un po 'come l'opzione 3), ma mi ritrovo a mettere in discussione quel nome.
Uso frequentemente questo modello di blocco (nell'esempio di codice fornito sopra) in tutte le mie applicazioni, quindi ho pensato che avrebbe senso avere un'opinione / discussione più professionale su una solida convenzione di denominazione per loro. Grazie!
SynchronizationContext
è qualcosa di completamente diverso.