Subversion Repositories HelenOS

Rev

Rev 2022 | Rev 2042 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2022 Rev 2028
Line 37... Line 37...
37
#define READERS     50
37
#define READERS     50
38
#define WRITERS     50
38
#define WRITERS     50
39
 
39
 
40
static rwlock_t rwlock;
40
static rwlock_t rwlock;
41
 
41
 
42
static void reader(void *arg);
-
 
43
static void failed(void);
-
 
44
 
-
 
45
static void reader(void *arg)
42
static void reader(void *arg)
46
{
43
{
47
    thread_detach(THREAD);
44
    thread_detach(THREAD);
48
 
45
 
49
    printf("cpu%d, tid %d: trying to lock rwlock for reading....\n", CPU->id, THREAD->tid);    
46
    printf("cpu%d, tid %d: trying to lock rwlock for reading....\n", CPU->id, THREAD->tid);    
Line 54... Line 51...
54
    printf("cpu%d, tid %d: trying to lock rwlock for writing....\n", CPU->id, THREAD->tid);    
51
    printf("cpu%d, tid %d: trying to lock rwlock for writing....\n", CPU->id, THREAD->tid);    
55
 
52
 
56
    rwlock_write_lock(&rwlock);
53
    rwlock_write_lock(&rwlock);
57
    rwlock_write_unlock(&rwlock);
54
    rwlock_write_unlock(&rwlock);
58
    printf("cpu%d, tid %d: success\n", CPU->id, THREAD->tid);              
55
    printf("cpu%d, tid %d: success\n", CPU->id, THREAD->tid);              
59
   
-
 
60
    printf("Test passed.\n");  
-
 
61
 
-
 
62
}
56
}
63
 
57
 
64
static void failed(void)
-
 
65
{
-
 
66
    printf("Test failed prematurely.\n");
-
 
67
    thread_exit();
-
 
68
}
-
 
69
 
-
 
70
void test_rwlock3(void)
58
char * test_rwlock3(void)
71
{
59
{
72
    int i;
60
    int i;
73
    thread_t *thrd;
61
    thread_t *thrd;
74
   
62
   
75
    printf("Read/write locks test #3\n");
-
 
76
   
-
 
77
    rwlock_initialize(&rwlock);
63
    rwlock_initialize(&rwlock);
78
 
-
 
79
    rwlock_write_lock(&rwlock);
64
    rwlock_write_lock(&rwlock);
80
   
65
   
81
    for (i=0; i<4; i++) {
66
    for (i = 0; i < 4; i++) {
82
        thrd = thread_create(reader, NULL, TASK, 0, "reader");
67
        thrd = thread_create(reader, NULL, TASK, 0, "reader");
83
        if (thrd)
68
        if (thrd)
84
            thread_ready(thrd);
69
            thread_ready(thrd);
85
        else
70
        else
86
            failed();
71
            printf("Could not create reader %d\n", i);
87
    }
72
    }
88
 
73
 
89
 
-
 
90
    thread_sleep(1);
74
    thread_sleep(1);
91
   
75
   
92
    rwlock_write_unlock(&rwlock);
76
    rwlock_write_unlock(&rwlock);
-
 
77
   
-
 
78
    return NULL;
93
}
79
}