--- trunk/livstidsfanger.c 2014/11/07 09:29:54 8 +++ trunk/livstidsfanger.c 2014/11/08 12:40:52 12 @@ -3,6 +3,10 @@ // $Ximalas$ +#if __STDC_VERSION__ < 199901L +#error det er tvilsomt om du får kompilert denne kildekoden med så gammel C-kompilator +#endif + #include #include #include @@ -10,6 +14,7 @@ #include #include #include +#include #include #if __STDC_VERSION__ >= 201112L @@ -38,10 +43,16 @@ noreturn int main(int argc, char **argv) size_t i; pthread_t tid = pthread_self(); - atexit(visResultater); - signal(SIGINT, signalhandler); + if (argc >= 0) { // Bare for å få clang til å ti stille. + atexit(visResultater); + signal(SIGINT, signalhandler); + } // if +#ifdef __FreeBSD__ srandomdev(); +#else + srandom((unsigned int)time(NULL)); +#endif memset((void *)&antallBesok, 0, sizeof(antallBesok)); brytere[0] = random() & 1; @@ -61,10 +72,12 @@ noreturn int main(int argc, char **argv) printf("maintråden oppretter livstidsfange %2zu\n", i + 1); if ( (errno = pthread_create(&tid, NULL, livstidsfange, (void *)i)) != 0) { + fflush(stdout); fprintf(stderr, "%s: pthread_create(&tid, NULL, livstidsfange, (void *)%2zu) = %s (%d)\n", argv[0], i, strerror(errno), errno); - exit(1); + fflush(stderr); + _exit(1); } // if } // for @@ -173,8 +186,7 @@ void visResultater(void) fflush(stderr); fflush(stdout); - fflush(stderr); - fflush(stdout); + puts("\nResultater:\n"); printf("bryter %u er ved avslutning vippet %s\n", 1U, brytere[0] == true ? "opp" : "ned"); @@ -184,6 +196,9 @@ void visResultater(void) for (i = 0; i < ANTALL_LIVSTIDSFANGER; i++) { printf("livstidsfange %2zu: antall besøk: %u\n", i + 1, antallBesok[i]); } // for + puts(""); + + printf("antall livstidsfanger talt av den tellende livstidsfangen er %u\n", antallLivstidsfanger); fflush(stdout); fflush(stdout);