/[livstidsfanger]/trunk/livstidsfanger.c
ViewVC logotype

Diff of /trunk/livstidsfanger.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 9 by trond, 2014-11-07T12:40:00Z Revision 11 by trond, 2014-11-08T11:56:59Z
# Line 54  noreturn int main(int argc, char **argv) Line 54  noreturn int main(int argc, char **argv)
54    
55    tellendeLivstidsfange = random() % ANTALL_LIVSTIDSFANGER;    tellendeLivstidsfange = random() % ANTALL_LIVSTIDSFANGER;
56    
57    printf("bryter %u er i utgangspunktet vippet %s\n", 1U, brytere[0] == true ? "opp" : "ned");    printf("bryter %u er i utgangspunktet vippet %s\n", 1U, brytere[0] == true ? "opp" : "ned");
58    printf("bryter %u er i utgangspunktet vippet %s\n", 2U, brytere[1] == true ? "opp" : "ned");    printf("bryter %u er i utgangspunktet vippet %s\n", 2U, brytere[1] == true ? "opp" : "ned");
59    printf("livstidsfange %zu er utpekt som den tellende livstidsfange\n\n", tellendeLivstidsfange + 1);    printf("livstidsfange %zu er utpekt som den tellende livstidsfange\n\n", tellendeLivstidsfange + 1);
60    
61    puts("maintråden venter på å få låst mutex");    puts("maintråden venter på å få låst mutex");
62    pthread_mutex_lock(&mutex);    pthread_mutex_lock(&mutex);
63    puts("mutex er låst av maintråden");    puts("mutex er låst av maintråden");
64    
65    for (i = 0; i < ANTALL_LIVSTIDSFANGER; i++) {    for (i = 0; i < ANTALL_LIVSTIDSFANGER; i++) {
66      printf("maintråden oppretter livstidsfange %2zu\n", i + 1);      printf("maintråden oppretter livstidsfange %2zu\n", i + 1);
67    
68      if ( (errno = pthread_create(&tid, NULL, livstidsfange, (void *)i)) != 0) {      if ( (errno = pthread_create(&tid, NULL, livstidsfange, (void *)i)) != 0) {
69          fflush(stdout);
70        fprintf(stderr,        fprintf(stderr,
71                "%s: pthread_create(&tid, NULL, livstidsfange, (void *)%2zu) = %s (%d)\n",                "%s: pthread_create(&tid, NULL, livstidsfange, (void *)%2zu) = %s (%d)\n",
72                argv[0], i, strerror(errno), errno);                argv[0], i, strerror(errno), errno);
73        exit(1);        fflush(stderr);
74          _exit(1);
75      } // if      } // if
76    } // for    } // for
77    
78    // maintråden påtar seg rolla som fengselsdirektøren.    // maintråden påtar seg rolla som fengselsdirektøren.
79    while (1) {    while (1) {
80      puts("fengselsdirektøren låser opp mutex");      puts("fengselsdirektøren låser opp mutex");
81      pthread_mutex_unlock(&mutex);      pthread_mutex_unlock(&mutex);
82      puts("mutex er låst opp av fengselsdirektøren");      puts("mutex er låst opp av fengselsdirektøren");
83    
84      puts("fengselsdirektøren signalerer livstidsfangene");      puts("fengselsdirektøren signalerer livstidsfangene");
85      pthread_cond_signal(&cond);      pthread_cond_signal(&cond);
86      puts("signal er sendt fra fengselsdirektøren");      puts("signal er sendt fra fengselsdirektøren");
87    
88      puts("fengselsdirektøren venter på å få låst mutex");      puts("fengselsdirektøren venter på å få låst mutex");
89      pthread_mutex_lock(&mutex);      pthread_mutex_lock(&mutex);
# Line 166  noreturn void *livstidsfange(void *arg) Line 168  noreturn void *livstidsfange(void *arg)
168      } // else      } // else
169    
170      // Tusle ut av rommet.      // Tusle ut av rommet.
171      printf("livstidsfange %2zu låser opp mutex\n", i + 1);      printf("livstidsfange %2zu låser opp mutex\n", i + 1);
172      pthread_mutex_unlock(&mutex);      pthread_mutex_unlock(&mutex);
173      printf("livstidsfange %2zu har låst opp mutex\n", i + 1);      printf("livstidsfange %2zu har låst opp mutex\n", i + 1);
174    } // while    } // while
175  } // livstidsfange()  } // livstidsfange()
176    
177  void visResultater(void)  void visResultater(void)
178  {  {
179    size_t i;    size_t i;
180    
181    fflush(stderr);    fflush(stderr);
182    fflush(stdout);    fflush(stdout);
183    fflush(stderr);  
   fflush(stdout);  
184    puts("\nResultater:\n");    puts("\nResultater:\n");
185    
186    printf("bryter %u er ved avslutning vippet %s\n", 1U, brytere[0] == true ? "opp" : "ned");    printf("bryter %u er ved avslutning vippet %s\n", 1U, brytere[0] == true ? "opp" : "ned");
187    printf("bryter %u er ved avslutning vippet %s\n", 2U, brytere[1] == true ? "opp" : "ned");    printf("bryter %u er ved avslutning vippet %s\n", 2U, brytere[1] == true ? "opp" : "ned");
188    printf("livstidsfange %2zu var den tellende livstidsfangen\n\n", tellendeLivstidsfange + 1);    printf("livstidsfange %2zu var den tellende livstidsfangen\n\n", tellendeLivstidsfange + 1);
189    
190    for (i = 0; i < ANTALL_LIVSTIDSFANGER; i++) {    for (i = 0; i < ANTALL_LIVSTIDSFANGER; i++) {
191      printf("livstidsfange %2zu: antall besøk: %u\n", i + 1, antallBesok[i]);      printf("livstidsfange %2zu: antall besøk: %u\n", i + 1, antallBesok[i]);
192    } // for    } // for
193    
194    fflush(stdout);    fflush(stdout);
195    fflush(stdout);    fflush(stdout);
196  } // visResultater()  } // visResultater()
197    
198  void signalhandler(int sig)  void signalhandler(int sig)


Legend:
Removed lines/characters  
Changed lines/characters
  Added lines/characters

svn@ximalas.info
ViewVC Help
Powered by ViewVC 1.3.0-dev