Ir al contenido principal

Entradas

Mostrando las entradas con la etiqueta sincronizacion

Modelacion y Simulación en Java

Este programa simula el uso de un recurso compartido entre dos procesos coordinados por el algoritmo #1 de dekker (alternancia estricta o sincronizacion forzada) también se pueden observar las tendencias del modelo y de la simulación según los parámetros establecidos ( en codigo :) ) Descargar Código Fuente

Algoritmo de Dekker #1 Alternancia Estricta

En el curso de sistemas operativos 1, se estudian las soluciones al problema de la exclusión mutua por software, uno de los temas es el algoritmo de Dekker y sus diferentes versiones, que buscan coordinar el acceso a un recurso compartido (o región critica) por un grupo de procesos, garantizando la exclusión mutua entre dichos procesos al usar el recurso. el primer intento del algoritmo de dekker es conocido como de "alternancia estricta" o "sincronizacion forzada" básicamente porque cada uno de los procesos tiene asignado un turno, y el algoritmo para coordinarlos solo hace cambiar el turno uno por uno, y luego vuelve a iniciar. esta forma de solucionar el problema garantiza la exclusión mutua pero introduce una fuerte dependencia entre los procesos, si un proceso usa el recurso a intervalos grandes, cuando su turno llega, los demás procesos deben esperar, por lo que los procesos lentos, retrasan a los procesos rápidos....

Threads en Java, Simulación de Proccess Control Block

Esta aplicación demuestra como sincronizar varios threads en java, se pueden crear threads en tiempo de ejecución y ver como estos actuan con la interface Codigo fuente del proyecto en JDeveloper 11g

Semaforos del Sistema en C/C++ sobre Linux

Crear semaforos en Linux para sincronizar procesos # include < sys/ipc.h > # include < sys/sem.h > void main ( ) { key_t llave ; int id_semaforo ; //algun archivo para crear la llave, todos los procesos //que desean obtener la misma llave deben pasar los mismos //parametros, con la misma llave tambien se adquiere el mismo //conjunto de semaforos llave = ftok ( " /bin/bash " , 'X' ) ; //crear 10 semaforos con persimos 0666 (rw-rw-rw-) id_semaforo = semget ( llave , 10 , 0666 | IPC_CREAT ) ; } al crear los semaforos en un proceso, es posible adquirir el mismo conjunto de semaforos desde otro proceso con una llamada a semget # include < sys/ipc.h > # include < sys/sem.h > void main ( ) { key_t llave ; int id_semaforo ; //la misma llave para obtener acceso al conjunto de semaforos creado llave = ftok ( " /bin/bash " , 'X' ) ; i...

QMutex como sincronizar Threads en QT

Este ejemplo es muy simple y muestra el uso básico de QMutex para forzar la exclusión mutua entre una serie de Threads que acceden a una región critica, se define una clase ThreadR que implementa el acceso a la región critica, dicha región critica utiliza los métodos lock() y unlock() de la clase QMutex para garantizar que solo uno de los threads accede a la variable protegida.  void run ( ) { while ( true ) { mutex . lock ( ) ; Reportar ( mNumero ) ; mutex . unlock ( ) ; sleep ( ( rand ( ) % 5 ) + 1 ) ; } } Descargar Código Fuente

Como Sincronizar Threads en Java

Una de las características importantes de Java es la posibilidad de realizar tareas de forma concurrente, usando la abstracción Thread, con la ejecución concurrente surge el problema de acceder a recursos compartidos y causar efectos indeseados debido a dicho acceso concurrente, esto se conoce como el problema de la región critica, tenemos un objeto que debe ser usado de forma secuencial, porque su uso concurrente produce resultados indeseados, en la teoría se estudian los algoritmos de Dekker, los semáforos y algunas otras soluciones incluso a nivel de hardware como test&set. En Java el acceso a un objeto puede ser forzado de forma serial, con el uso de métodos sincronizados  en este ejemplo, se crean varios Threads accediendo todos a una variable interna protegida por un método de acceso sincronizado, lo que garantiza acceso secuencial. Descargar Codigo Fuente  en JDeveloper