source: tests/concurrent/mutexstmt/scoped_lock.cfa @ 4b2ea0d

ADTast-experimentalpthread-emulationqualifiedEnum
Last change on this file since 4b2ea0d was 80e39f1, checked in by Thierry Delisle <tdelisle@…>, 3 years ago

Removed unnecessary stats include.

  • Property mode set to 100644
File size: 2.2 KB
Line 
1#include <mutex_stmt.hfa>
2#include <locks.hfa>
3
4const unsigned int num_times = 10000;
5
6single_acquisition_lock m1, m2, m3, m4, m5;
7
8bool insideFlag = false;
9int count = 0;
10
11thread T_Mutex_Scoped {};
12
13void main( T_Mutex_Scoped & this ) {
14        for (unsigned int i = 0; i < num_times; i++) {
15                {
16                        scoped_lock(single_acquisition_lock) s{m1};
17                        count++;
18                }
19                {
20                        scoped_lock(single_acquisition_lock) s{m1};
21                        assert(!insideFlag);
22                        insideFlag = true;
23                        assert(insideFlag);
24                        insideFlag = false;
25                }
26        }
27}
28
29thread T_Multi_Scoped {};
30
31void main( T_Multi_Scoped & this ) {
32        for (unsigned int i = 0; i < num_times; i++) {
33                {
34                        scoped_lock(single_acquisition_lock) s{m1};
35                        assert(!insideFlag);
36                        insideFlag = true;
37                        assert(insideFlag);
38                        insideFlag = false;
39                }
40                {
41                        scoped_lock(single_acquisition_lock) s1{m1};
42                        scoped_lock(single_acquisition_lock) s2{m2};
43                        scoped_lock(single_acquisition_lock) s3{m3};
44                        scoped_lock(single_acquisition_lock) s4{m4};
45                        scoped_lock(single_acquisition_lock) s5{m5};
46                        assert(!insideFlag);
47                        insideFlag = true;
48                        assert(insideFlag);
49                        insideFlag = false;
50                }
51                {
52                        scoped_lock(single_acquisition_lock) s1{m1};
53                        scoped_lock(single_acquisition_lock) s3{m3};
54                        assert(!insideFlag);
55                        insideFlag = true;
56                        assert(insideFlag);
57                        insideFlag = false;
58                }
59                {
60                        scoped_lock(single_acquisition_lock) s1{m1};
61                        scoped_lock(single_acquisition_lock) s2{m2};
62                        scoped_lock(single_acquisition_lock) s4{m4};
63                        assert(!insideFlag);
64                        insideFlag = true;
65                        assert(insideFlag);
66                        insideFlag = false;
67                }
68                {
69                        scoped_lock(single_acquisition_lock) s1{m1};
70                        scoped_lock(single_acquisition_lock) s3{m3};
71                        scoped_lock(single_acquisition_lock) s4{m4};
72                        scoped_lock(single_acquisition_lock) s5{m5};
73                        assert(!insideFlag);
74                        insideFlag = true;
75                        assert(insideFlag);
76                        insideFlag = false;
77                }
78        }
79}
80
81int num_tasks = 10;
82int main() {
83        processor p[10];
84
85        printf("Start Test: single scoped lock mutual exclusion\n");
86        {
87                T_Mutex_Scoped t[10];
88        }
89        assert(count == num_tasks * num_times);
90        printf("End Test: single scoped lock mutual exclusion\n");
91        printf("Start Test: multi scoped lock deadlock/mutual exclusion\n");
92        {
93                T_Multi_Scoped t[10];
94        }
95        printf("End Test: multi scoped lock deadlock/mutual exclusion\n");
96}
Note: See TracBrowser for help on using the repository browser.