Código:
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> // Definen funciones para manejo de hilos #include <sys/time.h> #define ciclos_x_seg 250000000 void *thread_function(void *arg); // Función donde inicia el hilo int main() { // Definición de variables int res; pthread_t a_thread,b_thread; // Identificador del hilo void *thread_result; long long start_ts; long long stop_ts; long long elapsed_time; long lElapsedTime; struct timeval ts; // Toma tiempo inicial gettimeofday(&ts, NULL); start_ts = ts.tv_sec * 1000000 + ts.tv_usec; // Tiempo inicial /* Aquí se crean los hilos */ res = pthread_create(&a_thread, NULL, thread_function,NULL); if (res != 0) { perror("Thread creation failed"); exit(EXIT_FAILURE); } res = pthread_create(&b_thread, NULL, thread_function,NULL); if (res != 0) { perror("Thread creation failed"); exit(EXIT_FAILURE); } res = pthread_join(a_thread, &thread_result); // Esperar a que terminen los hilos if (res != 0) { perror("La unión del hilo ha fallado"); exit(EXIT_FAILURE); } res = pthread_join(b_thread, &thread_result); if (res != 0) { perror("La unión del hilo ha fallado"); exit(EXIT_FAILURE); } // Se toma el tiempo final gettimeofday(&ts, NULL); stop_ts = ts.tv_sec * 1000000 + ts.tv_usec; // Tiempo final elapsed_time = stop_ts - start_ts; printf("Tiempo = %4.2f segundos\n",(float)elapsed_time/1000000); exit(EXIT_SUCCESS); } // Función donde inicia la ejecución el hilo secundario void *thread_function(void *arg) { int i; for (i=0; i< 2*ciclos_x_seg ; i++); // Ejecutar instrucciones del CPU // Uso intensivo del CPU pthread_exit(NULL); }