Oh cielos!
¡Parece que la respuesta correcta señalada aquí como LA RESPUESTA es inherentemente incorrecta! Me gustaría pedirle al autor de la respuesta, respetuosamente, que lea el artículo vinculado hasta el final.article
El autor del artículo de 2003 article fue la medición en la máquina de doble núcleo y sólo en el primer caso de medición, se mide bloqueo con un solo hilo solamente y el resultado fue de aproximadamente 50 ns por acceso a la cerradura.
No dice nada sobre un bloqueo en el entorno concurrente. Así que tenemos que seguir leyendo el artículo y en la segunda mitad el autor estaba midiendo el escenario de bloqueo con dos y tres hilos, lo que se acerca más a los niveles de concurrencia de los procesadores de hoy.
Así que el autor dice que, con dos hilos en Dual Core, los bloqueos cuestan 120ns, y con 3 hilos va a 180ns. Por lo tanto, parece ser claramente dependiente del número de subprocesos accedidos simultáneamente y más es peor.
Así que es simple, no es 50 ns, a menos que sea un solo hilo, donde la cerradura se vuelve inútil.
Otro tema a tener en cuenta es que se mide como tiempo promedio!
Si se midiera el tiempo de iteraciones, incluso habría tiempos entre 1ms y 20ms, simple porque la mayoría era rápida, pero pocos hilos esperarán el tiempo de los procesadores e incluso retrasos de milisegundos.
Estas son malas noticias para cualquier tipo de aplicación que requiera un alto rendimiento, baja latencia.
Y el último problema a tener en cuenta es que podría haber operaciones más lentas dentro del bloqueo y muy a menudo ese es el caso. Cuanto más tiempo se ejecuta el bloque de código dentro de la cerradura, mayor es la disputa y los retrasos se elevan a gran altura.
Tenga en cuenta que ya ha pasado más de una década desde 2003, es decir, algunas generaciones de procesadores diseñados específicamente para funcionar de manera simultánea y el bloqueo está perjudicando considerablemente el rendimiento de los mismos.
Bloquear la variable no es tan caro; es la espera de una variable bloqueada que desea evitar. – Gabe
es mucho menos costoso que pasar horas buscando otra condición de carrera ;-) – BrokenGlass
Bueno ... si un candado es costoso, es posible que desee evitarlos cambiando la programación para que necesite menos bloqueos. Podría implementar algún tipo de sincronización. –