Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Estructuras de Datos en Python
Por Cristian Suárez Sistemas Operativos 1 Año 2010
2
Matrices Sistemas Operativos 1 Año 2010
3
Matrices Idea para implementarlas en Python:
Diccionario de Diccionarios Motivo: Eficiencia (solo se guarda en memoria la info. utilizada) Fácil utilización Sistemas Operativos 1 Año 2010
4
Matrices - Implementación
class Matrix: def __init__(self, size): self.matrix = {} self.length = size for column in range(size): self.matrix[column] = {} El for pone un diccionario dentro de otro la cantidad de veces igual al tamaño. Sistemas Operativos 1 Año 2010
5
Matrices – Implementación - poner
Forma de agregar datos a la matriz: def put(self, i, j, elem): if (i < self.length): self.matrix[i][j] = elem Este método coloca el elemento deseado en la columna (i), fila (j). Sistemas Operativos 1 Año 2010
6
Matrices – Implementación - poner
Problema de este método: Dificil llenado de la matriz Solución: - Creación de un método que pueda llenar la matriz por filas o columnas. Sistemas Operativos 1 Año 2010
7
Matrices – Implementación - agregarFila
def addRow(self, j, row): for i in self.length: self.put(i, j, row[i]) Parámetro row: - Es un diccionario. Precondición: - Tamaño de la fila pasada = tamaño del ancho de la matriz. Sistemas Operativos 1 Año 2010
8
Matrices – Implementación - agregarColumna
def addColumn(self, i, column): for j in self.heigth(): self.put(i, j, column[j]) if (i >= self.length): self.length = i+1 def heigth(self): if (self.length == 0): return 0 else: return len(self.matrix[0]) Sistemas Operativos 1 Año 2010
9
Matrices – Implementación - auxiliares
Para ver columnas o filas enteras: def getColumn(self, i): if (i < self.length): return self.matrix[i] def getRow(self, j): resultDic = {} if (j in self.matrix[0]): for i in self.matrix: resultDic[i] = self.matrix[i][j] return resultDic Uso: - Futura comparación entre diccionarios. Sistemas Operativos 1 Año 2010
10
Semáforos Sistemas Operativos 1 Año 2010
11
Semáforos - introducción
Problema de una estructura no ThreadSafe: No podemos manejarla con más de un Thread. Solución: Usar herramientas ThreadSafe ¿Como podemos implementarlas?: - Utilizando Semáforos. Sistemas Operativos 1 Año 2010
12
Semáforos ¿Cómo son los semáforos?:
Estructura simple, solo guardan un número. Funcionamiento: Si el número está en cero, los Threads que quieran obtener permiso van a tener que esperar. Se el número es mayor a cero, el Thread obtiene permiso. Los Threads que empiezan a trabajar decrementan el valor del semáforo. Los Threads que terminan de trabajar incrementan el valor del semáforo. Sistemas Operativos 1 Año 2010
13
Semáforos Binarios Características:
- Semáforos que empiezan con su valor en 1. Solo un Thread a la vez va a obtener permisos. - Mismo Funcionamiento y estructura que los no binarios. Sistemas Operativos 1 Año 2010
14
Semáforos – Utilización en Python
Para empezar, importar lo siguiente: from threading import Semaphore Instanciación de forma sensilla: - semaforo = Semaphore(1) El número 1 indica que es binario. Se puede instanciar con un número mayor. No se puede instanciar un semáforo con valor < cero. Sistemas Operativos 1 Año 2010
15
Estructura ThreadSafe - Implementación
Ejemplo de utilización de un semáforo: class ThreadSafeList(): def __init__(self, list = []): self.semaphore = Semaphore(1) self.list = list Sistemas Operativos 1 Año 2010
16
Estructura ThreadSafe - Implementación
Próximos pasos: Creación de métodos ThreadSafe en la lista. Utilizamos acquire() para decrementar el valor del semáforo. Utilizamos release() para incrementar el valor del semáforo. Sistemas Operativos 1 Año 2010
17
Estructura ThreadSafe - Implementación
Ejemplo de utilización de los métodos del semáforo: def append(self, elem): # Adquirimos el Semáforo. self.semaphore.acquire() # Accedemos a la Estructura de forma segura. self.list.append(elem) # Liberamos el Semáforo. self.semaphore.release() Carácteristicas del método: - Solo 1 Thread a la vez podrá agregar elementos en la lista. Sistemas Operativos 1 Año 2010
18
Estructura ThreadSafe - Implementación
Otro ejemplo: def remove(self, index): self.semaphore.acquire() self.list[index:index+1] = [] self.semaphore.release() Características del método: - Solo 1 Thread a la vez podrá remover elementos en la lista. Sistemas Operativos 1 Año 2010
19
Fin Sistemas Operativos 1 Año 2010
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.