#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>

void check(int error) {
    if (error != 0) {
        fprintf(stderr, "Error: %s\n", strerror(error));
        exit(EXIT_FAILURE);
    }
}

volatile int aantal = 0;
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;

void* teller(void* par) {
    int i;
    for (i = 0; i < 10000000; i++) {
        check( pthread_mutex_lock(&m) );
        aantal++;
        check( pthread_mutex_unlock(&m) );
    }
    return NULL;
}

int main(void) {
    pthread_t t1, t2, t3;

    check( pthread_create(&t1, NULL, &teller, NULL) );
    check( pthread_create(&t2, NULL, &teller, NULL) );
    check( pthread_create(&t3, NULL, &teller, NULL) );

    check( pthread_join(t1, NULL) );
    check( pthread_join(t2, NULL) );
    check( pthread_join(t3, NULL) );
    
    printf("aantal = %d\n", aantal);

    return EXIT_SUCCESS;
}
