--- trunk/livstidsfanger.c 2014/11/08 11:56:59 11 +++ trunk/livstidsfanger.c 2014/11/19 19:32:53 15 @@ -1,10 +1,15 @@ -// Programmet bruker ISO C 2011 (ISO/IEC 9899:2011) og Pthreads (IEEE Std 1003.1c-1995). -*- coding: utf-8 -*- +// Programmet bruker ISO C 2011 (ISO/IEC 9899:2011) og Pthreads (IEEE Std 1003.1c-2001). -*- coding: utf-8 -*- // Løsning programmert av Trond Endrestøl , 2014-11-06. // $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 #include #include #include @@ -13,6 +18,10 @@ #include #include +#if _POSIX_THREADS < 200112L +#error her mangler det støtte for POSIX Threads anno 2001 +#endif + #if __STDC_VERSION__ >= 201112L #include #else @@ -39,8 +48,10 @@ 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(); @@ -171,6 +182,10 @@ noreturn void *livstidsfange(void *arg) printf("livstidsfange %2zu låser opp mutex\n", i + 1); pthread_mutex_unlock(&mutex); printf("livstidsfange %2zu har låst opp mutex\n", i + 1); + +#ifdef _POSIX_PRIORITY_SCHEDULING + sched_yield(); +#endif } // while } // livstidsfange() @@ -190,6 +205,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);