Algoritmia - Interezante - Algortimo

 
Vista:

Interezante - Algortimo

Publicado por Pepe (1 intervención) el 06/03/2008 01:32:38
Me encontré este ejercicio donde hay que implementar semaforos, trate de hacer un algoritmo pero implementando los semaforos pero nunca le llegué. Podrían ayudarme a crear un algoritmo o pseudocodigo, el ejercicio dice así:

Un estudiante que se especializa en antropologia y sigue una asignatura secundaria en computacion se ha comprometido en un proyecto de investigacion para observar si los mandriles africanos se les puede ensenar estacamientos. Localiza un canon profundo y sujeta una cuerda a traves de el, de manera que los mandriles puedan cruzar pasando a mano. Varios mandriles pueden atravesar al mismo tiempo, siempre que vayan en la misma direccion. Si los mandriles que viajan hacia el norte y los que viajan hacia el sur abordan la cuerda al mismo tiempo se producir un estancamiento (los mandriles se encuentran en el centro ) porque es imposible que un mandril pase sobre otro estando suspendidos sobre el canon. Si uno de ellos desea atravesar el canon, debe verificar que ningun mandril este atravesando el canon en ese momento en direccion contraria.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Implementación de semáforos en la observación de mandriles africanos

Publicado por Alejandro (307 intervenciones) el 11/03/2024 23:19:13
Pepe, para abordar este problema utilizando semáforos, puedes utilizar dos semáforos, uno para controlar el paso de los mandriles hacia el norte y otro para los mandriles hacia el sur. Además, necesitarás un semáforo adicional para gestionar el estancamiento.

Aquí tienes un pseudocódigo simple para ilustrar la implementación con semáforos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Declarar semáforos
Semáforo semaforoNorte = 1 // Inicializado en verde (puede cruzar)
Semáforo semaforoSur = 1   // Inicializado en verde (puede cruzar)
Semáforo semaforoEstancamiento = 1 // Inicializado en verde (no hay estancamiento)
 
Proceso MandrilNorte
    Esperar(semaforoEstancamiento) // Esperar a que no haya estancamiento
    Esperar(semaforoNorte)         // Esperar a que el semáforo esté en verde
    // Sección crítica: cruzar el cañón hacia el norte
    Liberar(semaforoNorte)         // Liberar el semáforo para permitir que otros crucen
    Liberar(semaforoEstancamiento) // Liberar el semáforo para permitir que otros crucen
 
Proceso MandrilSur
    Esperar(semaforoEstancamiento) // Esperar a que no haya estancamiento
    Esperar(semaforoSur)           // Esperar a que el semáforo esté en verde
    // Sección crítica: cruzar el cañón hacia el sur
    Liberar(semaforoSur)           // Liberar el semáforo para permitir que otros crucen
    Liberar(semaforoEstancamiento) // Liberar el semáforo para permitir que otros crucen
 
Proceso Estancamiento
    Esperar(semaforoNorte)         // Esperar a que el semáforo esté en verde para el norte
    Esperar(semaforoSur)           // Esperar a que el semáforo esté en verde para el sur
    // Sección crítica: verificar si hay mandriles cruzando en direcciones opuestas
    Si (no hay mandriles cruzando en direcciones opuestas) Entonces
        // Establecer semáforo de estancamiento en rojo
        Esperar(semaforoEstancamiento)
    Fin Si
    Liberar(semaforoNorte)         // Liberar el semáforo del norte para permitir que crucen
    Liberar(semaforoSur)           // Liberar el semáforo del sur para permitir que crucen
 
Fin Algoritmo

Este pseudocódigo utiliza tres semáforos: uno para controlar los mandriles hacia el norte, otro para los mandriles hacia el sur y uno adicional para gestionar el estancamiento. Cada mandril primero espera al semáforo de estancamiento antes de intentar cruzar. Luego, espera su respectivo semáforo (norte o sur) antes de cruzar. El proceso de estancamiento verifica si hay mandriles cruzando en direcciones opuestas y establece el semáforo de estancamiento en rojo si es necesario. Este enfoque ayuda a evitar el estancamiento y garantiza que los mandriles crucen de manera segura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar