source: tests/concurrent/mutexstmt/locks.cfa@ 4ecc35a

ADT ast-experimental enum pthread-emulation qualifiedEnum
Last change on this file since 4ecc35a was 51239d1b, checked in by caparsons <caparson@…>, 4 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.