Una pregunta relativamente menor, pero no he podido encontrar la documentación oficial o incluso la opinión del blog / discusiones sobre ella.
En pocas palabras: cuando tengo un objeto privado cuyo único propósito es servir para el lock
privado, ¿a qué llamo ese objeto?
class MyClass
{
private object LockingObject = new object();
void DoSomething()
{
lock(LockingObject)
{
//do something
}
}
}
¿Cómo deberíamos nombrar LockingObject
aquí? También tenga en cuenta no solo el nombre de la variable, sino también su aspecto dentro del código cuando se bloquea.
He visto varios ejemplos, pero aparentemente no tengo un consejo sólido:
-
Un montón de usos de
SyncRoot
(y variaciones tales como_syncRoot
).-
Ejemplo de código:
lock(SyncRoot)
,lock(_syncRoot)
- Esto parece estar influenciado por la declaración equivalente
SyncLock
de VB, la propiedadSyncRoot
que existe en algunas de las clases de ICollection y parte de algún tipo de patrón de diseño de SyncRoot (lo que podría decirse que es una mala idea) - Al estar en un contexto de C #, no estoy seguro de si quisiera tener una denominación VBish. Peor aún, en VB nombrar la variable igual que la palabra clave. No estoy seguro de si esto sería una fuente de confusión o no.
-
Ejemplo de código:
-
thisLock
ylockThis
de los artículos de MSDN: Declaración de bloqueo de C # , < a href="http://msdn.microsoft.com/en-us/library/3a86s51t.aspx"> Declaración de SyncLock de VB-
Ejemplo de código:
lock(thisLock)
,lock(lockThis)
- No estoy seguro si estos fueron nombrados mínimamente puramente para el ejemplo o no
- Es un poco raro si estamos usando esto dentro de una clase / método
static
. - EDITAR: El artículo de Wikipedia sobre bloqueos también usa esta denominación para su ejemplo
-
Ejemplo de código:
-
Varios usos de
PadLock
(de envoltura variable)-
Ejemplo de código:
lock(PadLock)
,lock(padlock)
- No está mal, pero mi única opción es que, como es lógico, invoca la imagen de un "candado" físico que tiendo a no asociar con el concepto abstracto de subprocesos .
-
Ejemplo de código:
-
Nombrar el bloqueo en función de lo que pretende bloquear
-
Ejemplo de código:
lock(messagesLock)
,lock(DictionaryLock)
,lock(commandQueueLock)
- En el ejemplo de la página de VB SyncRoot MSDN, tiene un ejemplo
simpleMessageList
con un objeto privadomessagesLock
- No creo que sea una buena idea nombrar el bloqueo contra el tipo que está bloqueando ("DictionaryLock") ya que es un detalle de la implementación que puede cambiar. Prefiero nombrar alrededor del concepto / objeto que está bloqueando ("messagesLock" o "commandQueueLock")
- Es interesante que muy rara vez veo esta convención de nomenclatura para bloquear objetos en muestras de código en línea o en StackOverflow.
-
Ejemplo de código:
-
(EDITAR) La especificación de C # en la sección "8.12 The Lock Statement" tiene un ejemplo de este patrón y lo denomina
synchronizationObject
-
Ejemplo de código:
lock(SynchronizationObject)
,lock(synchronizationObject)
-
Ejemplo de código:
Pregunta: ¿Cuál es su opinión en general acerca de nombrar privado para bloquear objetos?
Recientemente, comencé a nombrarlos ThreadLock
(por lo que me gusta la opción 3), pero me estoy cuestionando ese nombre.
Con frecuencia estoy usando este patrón de bloqueo (en el ejemplo de código proporcionado anteriormente) en mis aplicaciones, así que pensé que podría tener sentido obtener una opinión / discusión más profesional acerca de una convención de nomenclatura sólida para ellos. Gracias!