**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.
\\