*** trunk/livstidsfanger.c 2014/11/07 07:56:17 4
--- trunk/livstidsfanger.c 2014/11/07 08:04:18 5
***************
*** 6,11 ****
--- 6,12 ----
#include <errno.h>
#include <pthread.h>
#include <signal.h>
+ #include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
***************
*** 26,32 ****
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
! static unsigned brytere[2U];
noreturn void *livstidsfange(void *arg);
void visResultater(void);
--- 27,33 ----
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
! static bool brytere[2U];
noreturn void *livstidsfange(void *arg);
void visResultater(void);
***************
*** 83,93 ****
{
size_t i = (size_t)arg;
! unsigned harVippetBryter1 = 0U;
! unsigned bryter1HarVartOppe = 0U;
! unsigned forrigeGangErGyldig = 0U;
! unsigned forrigeGang = 0U;
// Den tellende livstidsfangen kan allerede nå telle seg selv.
if (i == tellendeLivstidsfange) {
--- 84,94 ----
{
size_t i = (size_t)arg;
! bool harVippetBryter1 = false;
! bool bryter1HarVartOppe = false;
! bool forrigeGangErGyldig = false;
! bool forrigeGang = false;
// Den tellende livstidsfangen kan allerede nå telle seg selv.
if (i == tellendeLivstidsfange) {
***************
*** 109,123 ****
printf("livstidsfange %2zu har besøkt rommet %u ganger\n", i + 1, antallBesok[i]);
if (i == tellendeLivstidsfange) {
! if (brytere[0] == 0U) {
printf("livstidsfange %2zu ser at bryter 1 er nede og vipper opp bryter 1\n", i + 1);
! brytere[0] = 1U;
} // if
else {
brytere[0] = !brytere[0];
printf("livstidsfange %2zu vipper %s bryter 1\n", i + 1, brytere[0] == 1U ? "opp" : "ned");
! if (forrigeGangErGyldig == 1U && forrigeGang == 0U) {
antallLivstidsfanger++;
printf("livstidsfange %2zu har talt opp %u livstidsfanger\n", i + 1, antallLivstidsfanger);
--- 110,124 ----
printf("livstidsfange %2zu har besøkt rommet %u ganger\n", i + 1, antallBesok[i]);
if (i == tellendeLivstidsfange) {
! if (brytere[0] == false) {
printf("livstidsfange %2zu ser at bryter 1 er nede og vipper opp bryter 1\n", i + 1);
! brytere[0] = true;
} // if
else {
brytere[0] = !brytere[0];
printf("livstidsfange %2zu vipper %s bryter 1\n", i + 1, brytere[0] == 1U ? "opp" : "ned");
! if (forrigeGangErGyldig == true && forrigeGang == false) {
antallLivstidsfanger++;
printf("livstidsfange %2zu har talt opp %u livstidsfanger\n", i + 1, antallLivstidsfanger);
***************
*** 127,156 ****
} // if
} // if
! forrigeGangErGyldig = 1U;
forrigeGang = brytere[0];
} // else
} // if
else { // Vanlig livstidsfange.
! if (brytere[0] == 1U) {
! printf("livstidsfange %2zu ser at bryter 1 er oppe, mens bryter 2 er %s\n", i + 1, brytere[1] == 1U ? "oppe" : "nede");
! bryter1HarVartOppe = 1U;
brytere[1] = !brytere[1];
! printf("livstidsfange %2zu vipper %s bryter 2\n", i + 1, brytere[1] == 1U ? "opp" : "ned");
} // if
else {
! printf("livstidsfange %2zu ser at bryter 1 er nede, mens bryter 2 er %s\n", i + 1, brytere[1] == 1U ? "oppe" : "nede");
! if (harVippetBryter1 == 0U && bryter1HarVartOppe == 1U) {
brytere[0] = !brytere[0];
! printf("livstidsfange %2zu vipper %s bryter 1\n", i + 1, brytere[0] == 1U ? "opp" : "ned");
! harVippetBryter1 = 1U;
} // if
else {
brytere[1] = !brytere[1];
! printf("livstidsfange %2zu vipper %s bryter 2\n", i + 1, brytere[1] == 1U ? "opp" : "ned");
} // else
} // else
} // else
--- 128,157 ----
} // if
} // if
! forrigeGangErGyldig = true;
forrigeGang = brytere[0];
} // else
} // if
else { // Vanlig livstidsfange.
! if (brytere[0] == true) {
! printf("livstidsfange %2zu ser at bryter 1 er oppe, mens bryter 2 er %s\n", i + 1, brytere[1] == true ? "oppe" : "nede");
! bryter1HarVartOppe = true;
brytere[1] = !brytere[1];
! printf("livstidsfange %2zu vipper %s bryter 2\n", i + 1, brytere[1] == true ? "opp" : "ned");
} // if
else {
! printf("livstidsfange %2zu ser at bryter 1 er nede, mens bryter 2 er %s\n", i + 1, brytere[1] == true ? "oppe" : "nede");
! if (harVippetBryter1 == false && bryter1HarVartOppe == true) {
brytere[0] = !brytere[0];
! printf("livstidsfange %2zu vipper %s bryter 1\n", i + 1, brytere[0] == true ? "opp" : "ned");
! harVippetBryter1 = true;
} // if
else {
brytere[1] = !brytere[1];
! printf("livstidsfange %2zu vipper %s bryter 2\n", i + 1, brytere[1] == true ? "opp" : "ned");
} // else
} // else
} // else
|