Subversion Repositories HelenOS

Rev

Rev 4055 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4055 Rev 4296
Line 64... Line 64...
64
    rwlock_read_lock(&rwlock);
64
    rwlock_read_lock(&rwlock);
65
    atomic_inc(&items_read);
65
    atomic_inc(&items_read);
66
    rwlock_read_unlock(&rwlock);
66
    rwlock_read_unlock(&rwlock);
67
}
67
}
68
 
68
 
69
char * test_rwlock5(bool quiet)
69
char *test_rwlock5(void)
70
{
70
{
71
    int i, j, k;
71
    int i, j, k;
72
    long readers, writers;
72
    long readers, writers;
73
   
73
   
74
    waitq_initialize(&can_start);
74
    waitq_initialize(&can_start);
Line 81... Line 81...
81
        atomic_set(&items_written, 0);
81
        atomic_set(&items_written, 0);
82
 
82
       
83
        readers = i * READERS;
83
        readers = i * READERS;
84
        writers = (4 - i) * WRITERS;
84
        writers = (4 - i) * WRITERS;
85
 
85
       
86
        printf("Creating %ld readers and %ld writers...", readers, writers);
86
        TPRINTF("Creating %ld readers and %ld writers...", readers, writers);
87
       
87
       
88
        for (j = 0; j < (READERS + WRITERS) / 2; j++) {
88
        for (j = 0; j < (READERS + WRITERS) / 2; j++) {
89
            for (k = 0; k < i; k++) {
89
            for (k = 0; k < i; k++) {
90
                thrd = thread_create(reader, NULL, TASK, 0, "reader", false);
90
                thrd = thread_create(reader, NULL, TASK, 0, "reader", false);
91
                if (thrd)
91
                if (thrd)
92
                    thread_ready(thrd);
92
                    thread_ready(thrd);
93
                else
93
                else
94
                    printf("Could not create reader %d\n", k);
94
                    TPRINTF("Could not create reader %d\n", k);
95
            }
95
            }
96
            for (k = 0; k < (4 - i); k++) {
96
            for (k = 0; k < (4 - i); k++) {
97
                thrd = thread_create(writer, NULL, TASK, 0, "writer", false);
97
                thrd = thread_create(writer, NULL, TASK, 0, "writer", false);
98
                if (thrd)
98
                if (thrd)
99
                    thread_ready(thrd);
99
                    thread_ready(thrd);
100
                else
100
                else
101
                    printf("Could not create writer %d\n", k);
101
                    TPRINTF("Could not create writer %d\n", k);
102
            }
102
            }
103
        }
103
        }
104
 
104
       
105
        printf("ok\n");
105
        TPRINTF("ok\n");
106
 
106
       
107
        thread_sleep(1);
107
        thread_sleep(1);
108
        waitq_wakeup(&can_start, WAKEUP_ALL);
108
        waitq_wakeup(&can_start, WAKEUP_ALL);
109
   
109
       
110
        while ((items_read.count != readers) || (items_written.count != writers)) {
110
        while ((items_read.count != readers) || (items_written.count != writers)) {
111
            printf("%d readers remaining, %d writers remaining, readers_in=%d\n", readers - items_read.count, writers - items_written.count, rwlock.readers_in);
111
            TPRINTF("%d readers remaining, %d writers remaining, readers_in=%d\n", readers - items_read.count, writers - items_written.count, rwlock.readers_in);
112
            thread_usleep(100000);
112
            thread_usleep(100000);
113
        }
113
        }
114
    }
114
    }
115
   
115
   
116
    return NULL;
116
    return NULL;