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 2: Resolución de problemas de sincronización mediante esperas activas. Implementación y estudio del comportamiento.
    • enunciado: practica2.pdf
    • ejemplo fichero Makefile para el primer ejercicio: 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>
           ...
           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<chrono::nanoseconds>(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 <sstream>
           ...
           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
                  ...
           }
           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"
           };

—-
Sobre la codificación

  • Cada fichero fuente debe llevar una cabecera. Un ejemplo sencillo, además de estar adecuadamente comentado.


practicas/indice.txt · Última modificación: 2020/11/08 19:52 por ezpeleta
Ir hasta arriba
CC Attribution-Share Alike 3.0 Unported
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0