**La información en este sitio web corresponde al curso académico 19/20. La información del curso 20/21 está accesible a través del correspondiente curso de moodle de la Universidad de Zaragoza** Según los criterios de la asignatura, es necesario obtener una calificación mayor o igual que 4 para superar esta actividad. En caso contrario es necesario presentarse a la correspondiente prueba alternativa (véase los criterios de evaluación de la guía docente). \\ ---- \\ **Material** para el desarrollo de las sesiones en el laboratorio (curso 2019-2020): * **Práctica 1**: Una primera aproximación a la programación concurrente en C++ * enunciado: {{practicas:practica1.pdf| practica1.pdf}} * código fuente: {{practicas:material_pract_1.zip| material_pract_1.zip}} * **Práctica 2**: Resolución de problemas de sincronización mediante esperas activas. Implementación y estudio del comportamiento. * enunciado: {{practicas:practica2.pdf| practica2.pdf}} * ejemplo fichero Makefile para el primer ejercicio: {{practicas:makefile_p2_e1.zip| Makefile_p2_e1.zip}} * Nota relativa al parámetro ''tMax''. Para tiempos pequeños, la librería ''ctime'' no da suficiente precisión, por lo que es preferible usar ''std::chrono''. Un ejemplo de código, midiendo el tiempo de ejecución en nanosegundos, sería #include ... chrono::steady_clock::time_point start = chrono::steady_clock::now(); ...ejecución del código cuyo tiempo se quiere medir chrono::steady_clock::time_point end = chrono::steady_clock::now(); chrono::nanoseconds t = chrono::duration_cast(end - start); cout << "Tiempo de ejecución (nsegs): " << t.count() << endl; * Nota relativa al parámetro ''idMasLento'': en la versión inicial, este estaba declarado como ''std::thread::id& idMasLento''. Sin embargo, es posible que C++ dé error debido a que es destruído en el momento de finalización del thread. Con el objeto de pasar el id del thread que terminó el último, vamos a guardar una copia en el nuevo parámetro, que es de tipo ''string''. Para ello, antes de terminar el thread vamos a guardarlo como un string como sigue: #include ... void prod_Mat_Vect(const Mat A, const Vect x, const int f1, const int f2, Vect& pMV,std::chrono::nanoseconds& tMax, std::string& idMasLento, std::atomic_flag& tas) { ... stringstream ss; //mirar doc. en C++ sobre los "stringstream" ... ss << this_thread::get_id(); //sobre un "stringstream" se puede usar el operador "<<" idMasLento = ss.str(); //copiamos el string que hay en "ss" en el parámetro por referencia ... } * **Práctica 3**: Programación con semáforos en C++ * enunciado: {{practicas:practica3.pdf| practica3.pdf}} * material: {{practicas:material_pract_3.zip| material_pract_3.zip}} * //script// de comprobación de la correcta organización del zip de entrega: {{practicas:pract_3_correcta.zip| pract_3_correcta.zip}} * Todos los procesos escritores deberán cifrar las siguiente ocho frases: const string mensajes[] = { "a leopard never changes its spots", "a friend in need is a friend indeed", "kill two birds with one stone", "every cloud has a silver lining", "things often happen when you least expect them to", "who laughs last laughs longest", "a cat in gloves catches no mice", "actions speak louder than words" }; * **Práctica 4**: Programación con monitores en C++ * enunciado: {{practicas:practica4.pdf| practica4.pdf}} * material: {{practicas:material_pract_4_v2.zip| material_pract_4.zip}} * //script// de comprobación de la correcta organización del zip de entrega: {{practicas:pract_4_correcta.zip| pract_4_correcta.zip}} * **Práctica 5**: Programación de sistemas cliente-servidor en C++ * enunciado: {{practicas:practica5.pdf| practica5.pdf}} * material: {{practicas:material_pract_5.zip| material_pract_5.zip}} ---- \\ **Sobre la codificación** * **Es necesario** seguir un conjunto de normas respecto a la codificación de los fuentes. Una posible es [[https://google.github.io/styleguide/cppguide.html|Google C++ Style Guide]]. Otra posible es la propuesta en [[http://webdiis.unizar.es/asignaturas/PROG1/doc/materiales/guia_estilo.pdf]] * Cada fichero fuente debe llevar una cabecera. Un ejemplo [[sencillo]], además de estar adecuadamente comentado. \\