Mientras leía un artículo de investigación sobre concurrencia llamado Software and the Concurrency Revolution ( versión html ). Encontré las siguientes líneas:
Desafortunadamente, aunque los bloqueos funcionan, plantean serios problemas para el desarrollo de software moderno. Un problema fundamental con las cerraduras es que no son componibles . No puede tomar dos piezas de código correctas basadas en bloqueo, combinarlas y saber que el resultado sigue siendo correcto. El desarrollo de software moderno se basa en la capacidad de componer bibliotecas en programas más grandes, por lo que es una gran dificultad que no podamos construir sobre componentes basados en bloqueos sin examinar sus implementaciones.
Estaba pensando, cómo Java garantiza la concurrencia composable o incluso si hay una manera de producir estos escenarios.
¿Y cómo podemos sincronizar datos en una o más bibliotecas? ¿Puede un programador hacerlo desde su programa o depende de la biblioteca sincronizar las cosas?
Si no es Java, ¿hay algún otro idioma que use concurrencia basada en bloqueo y garantice concurrencia componible?
Lo siguiente también se toma del mismo documento:
Existen al menos tres problemas principales con los métodos sincronizados. Primero, no son apropiados para tipos cuyos métodos invocan funciones virtuales en otros objetos (por ejemplo, Vector de Java y SyncHashTable de .NET), porque llamar a un código de terceros mientras se mantiene un bloqueo abre la posibilidad de un punto muerto . En segundo lugar, los métodos sincronizados pueden realizar demasiados bloqueos, mediante la adquisición y liberación de bloqueos en todas las instancias de objetos, incluso aquellos que nunca se comparten entre subprocesos (generalmente la mayoría). Tercero, los métodos sincronizados también pueden realizar muy poco bloqueo, al no preservar la atomicidad cuando un programa llama a múltiples métodos en un objeto o en diferentes objetos. Como un ejemplo simple de esto último, considere una transferencia bancaria: cuenta1.Crédito (monto); cuenta 2. Débito (cantidad) ...
Nota: El artículo se publicó en septiembre de 2005.