source: tests/concurrency/mutexstmt/monitors.cfa @ 50e04cc

Last change on this file since 50e04cc was c26bea2a, checked in by Peter A. Buhr <pabuhr@…>, 19 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: 1.5 KB
Line 
1#include <monitor.hfa>
2#include <mutex_stmt.hfa>
3#include <stdio.h>
4#include <stdlib.hfa>
5#include <thread.hfa>
6
7const unsigned int num_times = 10000;
8
9monitor monitor_t {};
10
11monitor_t m1, m2, m3, m4, m5;
12
13thread T_Mutex {};
14bool insideFlag = false;
15int count = 0;
16bool startFlag = false;
17
18void main( T_Mutex & this ) {
19        for (unsigned int i = 0; i < num_times; i++) {
20                mutex ( m1 ) count++;
21                mutex ( m1 ) {
22                        assert(!insideFlag);
23                        insideFlag = true;
24                        assert(insideFlag);
25                        insideFlag = false;
26                }
27        }
28}
29
30thread T_Multi {};
31
32void main( T_Multi & this ) {
33        for (unsigned int i = 0; i < num_times; i++) {
34                mutex ( m1 ) {
35                        assert(!insideFlag);
36                        insideFlag = true;
37                        assert(insideFlag);
38                        insideFlag = false;
39                }
40                mutex ( m1, m2, m3, m4, m5 ) {
41                        assert(!insideFlag);
42                        insideFlag = true;
43                        assert(insideFlag);
44                        insideFlag = false;
45                }
46                mutex ( m3, m1 ) {
47                        assert(!insideFlag);
48                        insideFlag = true;
49                        assert(insideFlag);
50                        insideFlag = false;
51                }
52                mutex ( m1, m2, m4 ) {
53                        assert(!insideFlag);
54                        insideFlag = true;
55                        assert(insideFlag);
56                        insideFlag = false;
57                }
58                mutex ( m1, m3, m4, m5 ) {
59                        assert(!insideFlag);
60                        insideFlag = true;
61                        assert(insideFlag);
62                        insideFlag = false;
63                }
64        }
65}
66
67
68int main() {
69        processor p[10];
70
71        printf("Start Test: single monitor mutual exclusion\n");
72        {
73                T_Mutex t[10];
74        }
75        printf("End Test: single monitor mutual exclusion\n");
76        printf("Start Test: multi monitor deadlock/mutual exclusion\n");
77        {
78                T_Multi t[10];
79        }
80        printf("End Test: multi monitor deadlock/mutual exclusion\n");
81}
Note: See TracBrowser for help on using the repository browser.