source: tests/concurrent/mutexstmt/locks.cfa @ 51239d1b

ADTast-experimentalenumpthread-emulationqualifiedEnum
Last change on this file since 51239d1b was 51239d1b, checked in by caparsons <caparson@…>, 2 years ago

added new mutexstmt tests

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