source: tests/concurrency/mutexstmt/locks.cfa @ 8c13ca8

Last change on this file since 8c13ca8 was c26bea2a, checked in by Peter A. Buhr <pabuhr@…>, 18 months ago

first attempt at renaming directory tests/concurrent to tests/concurrency to harmonize with other concurrency directory names

  • Property mode set to 100644
File size: 2.6 KB
RevLine 
[af67ee1]1#include <mutex_stmt.hfa>
[a4d098c]2#include <locks.hfa>
3
4const unsigned int num_times = 10000;
5
[51239d1b]6Duration default_preemption() { return 0; }
7
[bbe3719]8single_acquisition_lock m1, m2, m3, m4, m5;
[a4d098c]9
10thread T_Mutex {};
11bool insideFlag = false;
12int count = 0;
13
14void main( T_Mutex & this ) {
15        for (unsigned int i = 0; i < num_times; i++) {
16                mutex ( m1 ) count++;
[af67ee1]17                mutex ( m1 ) {
[a4d098c]18                        assert(!insideFlag);
19                        insideFlag = true;
20                        assert(insideFlag);
21                        insideFlag = false;
22                }
23        }
24}
25
[51239d1b]26void refTest( single_acquisition_lock & m ) {
27        mutex ( m ) {
28                assert(!insideFlag);
29                insideFlag = true;
30                assert(insideFlag);
31                insideFlag = false;
32        }
33}
34
[a4d098c]35thread T_Multi {};
36
37void main( T_Multi & this ) {
38        for (unsigned int i = 0; i < num_times; i++) {
[51239d1b]39                refTest( m1 );
[a4d098c]40                mutex ( m1 ) {
41                        assert(!insideFlag);
42                        insideFlag = true;
43                        assert(insideFlag);
44                        insideFlag = false;
45                }
46                mutex ( m1, m2, m3, m4, m5 ) {
47                        assert(!insideFlag);
48                        insideFlag = true;
49                        assert(insideFlag);
50                        insideFlag = false;
51                }
52                mutex ( m3, m1 ) {
53                        assert(!insideFlag);
54                        insideFlag = true;
55                        assert(insideFlag);
56                        insideFlag = false;
57                }
58                mutex ( m1, m2, m4 ) {
59                        assert(!insideFlag);
60                        insideFlag = true;
61                        assert(insideFlag);
62                        insideFlag = false;
63                }
64                mutex ( m1, m3, m4, m5 ) {
65                        assert(!insideFlag);
66                        insideFlag = true;
67                        assert(insideFlag);
68                        insideFlag = false;
69                }
70        }
71}
72
[51239d1b]73single_acquisition_lock l1;
[703c88e]74exp_backoff_then_block_lock l2;
[51239d1b]75owner_lock l3;
76
[b39e961b]77monitor monitor_t {};
78
79monitor_t l4;
80
[51239d1b]81thread T_Multi_Poly {};
82
83void main( T_Multi_Poly & this ) {
84        for (unsigned int i = 0; i < num_times; i++) {
85                refTest( l1 );
[b39e961b]86                mutex ( l1, l4 ) {
[51239d1b]87                        assert(!insideFlag);
88                        insideFlag = true;
89                        assert(insideFlag);
90                        insideFlag = false;
91                }
92                mutex ( l1, l2, l3 ) {
93                        assert(!insideFlag);
94                        insideFlag = true;
95                        assert(insideFlag);
96                        insideFlag = false;
97                }
[b39e961b]98                mutex ( l3, l1, l4 ) {
[51239d1b]99                        assert(!insideFlag);
100                        insideFlag = true;
101                        assert(insideFlag);
102                        insideFlag = false;
103                }
[b39e961b]104                mutex ( l1, l2, l4 ) {
[51239d1b]105                        assert(!insideFlag);
106                        insideFlag = true;
107                        assert(insideFlag);
108                        insideFlag = false;
109                }
110        }
111}
112
[f57f6ea0]113int num_tasks = 10;
[a4d098c]114int main() {
[51239d1b]115        processor p[num_tasks - 1];
[a4d098c]116
117        printf("Start Test: single lock mutual exclusion\n");
118        {
[51239d1b]119                T_Mutex t[num_tasks];
[a4d098c]120        }
[f57f6ea0]121        assert(count == num_tasks * num_times);
[a4d098c]122        printf("End Test: single lock mutual exclusion\n");
123        printf("Start Test: multi lock deadlock/mutual exclusion\n");
124        {
[51239d1b]125                T_Multi t[num_tasks];
[a4d098c]126        }
127        printf("End Test: multi lock deadlock/mutual exclusion\n");
[51239d1b]128        printf("Start Test: multi polymorphic lock deadlock/mutual exclusion\n");
129        {
130                T_Multi_Poly t[num_tasks];
131        }
132        printf("End Test: multi polymorphic lock deadlock/mutual exclusion\n");
[623d1c8]133}
Note: See TracBrowser for help on using the repository browser.