#include #include #include #include long ntimes = 0; char data[] = {'0', '1'}; // llamadas de sistemas utilizadas: // write, pthread_create, pthread_join, pthread_exit, exit void* writer(void *arg) { for (int i = 0; i < ntimes; ++i) { // (1 !=) porque escribe 1 byte if (1 != write(STDOUT_FILENO, arg, 1)) { fprintf(stderr, "Fallo la escritura\n"); pthread_exit(NULL); } } return arg; } // OJO **siempre** verificar la respuesta // de una llamada de sistema. // leer las man pages de cada llamada // de funcion utilizada y ver que codigos // de error puede devolver para actuar // segun corresponda // http://man7.org/linux/man-pages/index.html int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "Usage: %s NTIMES\n", argv[0]); // exit hace flush streams de stdio exit(EXIT_FAILURE); } ntimes = strtol(argv[1], NULL, 10); pthread_t t1, t2; if (0 != pthread_create(&t1, NULL, writer, &data[0])) { fprintf(stderr, "No se pudo crear hilo 1.\n"); exit(EXIT_FAILURE); } if (0 != pthread_create(&t2, NULL, writer, &data[1])) { fprintf(stderr, "No se pudo crear hilo 2.\n"); exit(EXIT_FAILURE); } if (0 != pthread_join(t1, NULL)) { fprintf(stderr, "No se pudo esperar hilo 1.\n"); exit(EXIT_FAILURE); } if (0 != pthread_join(t2, NULL)) { fprintf(stderr, "No se pudo esperar hilo 2.\n"); exit(EXIT_FAILURE); } putchar('\n'); return EXIT_SUCCESS; }