//thread for read operations void *threadreadlock(void *vargp) { printf("%s\n", "Wait for reading!"); rwlock_lockRead(&rwl); //read lock printf("%s%d\n", "Reading... Value: ", i); //read and print value //rwlock_getInfo(&rwl); rwlock_unlock(&rwl); //read unlock return NULL; }
static void *reader1(void *arg) { //Leselock anfordern rwlock_lockRead(&filelock); printf("Reader 1 working...\n"); //Datei öffnen fp = fopen("testb.txt","rt"); if (fp == NULL) { printf("Error trying to open testb.txt\n"); return NULL; } //Datei komplett auslesen int c; while ((c = getc(fp)) != EOF) { putchar(c); } fclose(fp); printf("Reader 1 done.\n"); rwlock_unlock(&filelock); return NULL; }
static void *reader(void *arg) { // 2 Runden int c; for(c = 0;c <2; c++){ // Lese lock anfordern rwlock_lockRead(&varlock); printf("Reader printing...%u.\n",(unsigned int) pthread_self()); int i; // Runde Nr., i und die Threadid ausgeben und zwischendurch warten for(i = 1; i <= 20 ; i++) { printf("c = %d i = %d count = %d \t %u.\n", c, i, count,(unsigned int) pthread_self()); if (i % 50) sleep(rand() % 2); } //Readlock weg rwlock_unlock(&varlock); printf("Reader waiting...%u\n",(unsigned int) pthread_self()); sleep(1); } printf("Reader done..%u\n",(unsigned int) pthread_self()); return NULL; }