La diferencia entre bloqueos mutex y bloqueos de lectura y escritura en la sincronización de subprocesos POS y sus respectivos escenarios de aplicación
Tome el lenguaje Java como ejemplo:
Utilice la palabra clave sincronizada para modificar el método de sincronización.
La sincronización se puede lograr de las siguientes maneras: sincronizado, esperando y notificando
esperar(): pone el hilo en estado de espera y libera el bloqueo del objeto que contiene.
sleep(): pone el hilo en ejecución en estado de suspensión. Es un método estático utilizado para detectar InterruptedException.
notify(): activa el hilo en estado de espera. Tenga en cuenta que cuando se llama a este método, el subproceso en espera no se puede activar exactamente, sino que la JVM decide qué subproceso activar, no en función de la prioridad;
Allnotity(): activa todos los subprocesos en estado de espera. Tenga en cuenta que no otorga bloqueos de objetos a todos los subprocesos activados, pero les permite competir.
La sincronización es un concepto importante en multiproceso. El uso de la sincronización garantiza que en un entorno de ejecución de subprocesos múltiples, el programa no producirá resultados erróneos más allá del diseño. Hay dos formas de implementar la sincronización: métodos sincronizados y bloques sincronizados, los cuales utilizan la palabra clave sincronizada.
Agregar el modificador sincronizado a un método lo convierte en un método sincronizado, que puede ser estático o no estático, pero no puede ser un método abstracto de una clase abstracta o un método de interfaz de una interfaz. El siguiente código es un ejemplo de un método sincronizado:
public sincronizado void aMethod() {
// hacer algo
}
public static sincronizado void anotherMethod() {
// hacer algo
}
El hilo es exclusivo al ejecutar un método sincronizado. Cuando un subproceso ingresa a cualquier método sincronizado de un objeto, todos los métodos sincronizados del objeto se bloquean. Durante este período, ningún otro subproceso puede acceder a ningún método sincronizado del objeto hasta que el subproceso haya terminado de ejecutar el método sincronizado que llamó y haya salido de él. Esto libera el bloqueo de sincronización del objeto. Después de que un hilo bloquea un objeto, otros hilos pueden acceder a todos los métodos no sincronizados del objeto.
Un bloque sincronizado sincroniza el código contenido en el bloque bloqueando el objeto especificado, mientras que el método sincronizado sincroniza el código en el bloque del método. En este caso, el objeto bloqueado es el objeto principal al que pertenece. pertenece el método sincronizado. ¿Qué pasa si el método es un método sincronizado estático? Entonces lo que bloquea el hilo no es el objeto de la clase, ni la clase en sí, sino el objeto del tipo java.lang.Class correspondiente a la clase. Las restricciones mutuas entre métodos sincronizados y bloques sincronizados están limitadas al mismo objeto, por lo que los métodos sincronizados estáticos solo están restringidos por otros métodos sincronizados estáticos de la clase a la que pertenecen y no tienen nada que ver con las instancias (objetos) de la clase.