source: tests/concurrent/multi-monitor.cfa @ b8665e3

ADTarm-ehast-experimentalcleanup-dtorsenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprpersistent-indexerpthread-emulationqualifiedEnum
Last change on this file since b8665e3 was 107b01a, checked in by Thierry Delisle <tdelisle@…>, 6 years ago

Several changes to the makefiles

  • change .c tests to .cfa
  • add require for libtool in configure
  • libtoolize to fix some warnings
  • Property mode set to 100644
File size: 986 bytes
Line 
1#include <fstream.hfa>
2#include <kernel.hfa>
3#include <monitor.hfa>
4#include <thread.hfa>
5
6static int global12, global23, global13;
7
8monitor monitor_t {};
9
10static monitor_t m1, m2, m3;
11
12void increment( monitor_t & mutex p1, monitor_t & mutex p2, int & value ) {
13        value += 1;
14}
15
16thread MyThread {
17        int target;
18};
19
20void ?{}( MyThread & this, int target ) {
21        this.target = target;
22}
23
24void ^?{}( MyThread & mutex this ) {}
25
26void main( MyThread & this ) {
27        for(int i = 0; i < 1000000; i++) {
28                choose(this.target) {
29                        case 0: increment( m1, m2, global12 );
30                        case 1: increment( m2, m3, global23 );
31                        case 2: increment( m1, m3, global13 );
32                }
33        }
34}
35
36forall(dtype T | sized(T) | { void ^?{}(T & mutex); })
37void delete_mutex(T * x) {
38        ^(*x){};
39        free(x);
40}
41
42int main(int argc, char* argv[]) {
43        processor p;
44        {
45                MyThread * f[6];
46                for(int i = 0; i < 6; i++) {
47                        f[i] = new(i % 3);
48                }
49
50                for(int i = 0; i < 6; i++) {
51                        delete_mutex( f[i] );
52                }
53        }
54        sout | global12 | global23 | global13;
55}
Note: See TracBrowser for help on using the repository browser.