• Inicio

    Objetivos

    Introducir elementos fundacionales de la concurrencia, las problemáticas asociadas y los medios para tratar con ella, tanto en lo que se refiere a la programación, 
como al diseño de los sistemas, utilizando métodos formales.


    Contenidos

    1- De la programación secuencial a la concurrente; concurrencia vs. paralelismo. 
No-determinismo y concurrencia. Irreproducibilidad de cómputos.

    

2- Nociones de proceso, threads  e interleaving

    

3- Problemas clásicos y propiedades:  deadlock, livelocks y starvation. Race conditions y fairness. Safety y liveness.

    

4- Modelos de memoria compartida. 
Atomicidad e independencia. Exclusión mutua (secciones críticas). 
Métodos de sincronización: semáforos, monitores y condiciones, barreras.

    5- Modelo de intercambio de mensajes: comunicación sincrónica vs comunicación asincrónica. Canales.

    

6- Enfoques a la programación concurrente. 
Lenguajes funcionales concurrentes, modelo de actores, à la Join, à la Linda. Programación libre de locks.

    7- Tipos para concurrencia. Tipos sesión. Lenguajes funcionales con tipos sesión.


    Modo de evaluación

    La evaluación consiste en 1 parcial, 1 trabajo práctico (grupal) y un coloquio final.

    Cada instancia tiene su propio recuperatorio.


    Horarios

    Martes de 14 a 17 : Prácticas (aula 11).

    Miércoles de 14 a 17: Teóricas (aula 11).

     
    Docente

    Hernán Melgratti

     

    Bibliografía

    Mordechai Ben-Ari. Principles of Concurrent and Distributed Programming. Prentice Hall, 2006.

    Maurice Herlihy and Nir Shavit. The Art of Multiprocessor Programming. Morgan Kaufmann, 2008.

    Jones, S. P. (2007). Beautiful concurrency. Beautiful Code: Leading Programmers Explain How They Think, 385-406.

    K Gregory R. Andrews,  Foundations of Multithreaded, Parallel, and Distributed Programming, Addison-Wesley, 2000.

    Fraser and T. Harris. Concurrent programming without locks. ACM Transactions on Computer Systems (TOCS), 25(2):146-196, 2007.

    Hüttel, Hans, et al. "Foundations of session types and behavioural contracts." ACM Computing Surveys (CSUR) 49.1, 2016.