source: src/benchmark/SchedInt.c@ 2c1830a6

ADT aaron-thesis arm-eh ast-experimental cleanup-dtors deferred_resn demangler enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr new-env no_list persistent-indexer pthread-emulation qualifiedEnum resolv-new with_gc
Last change on this file since 2c1830a6 was e0b8ccd5, checked in by Thierry Delisle <tdelisle@…>, 8 years ago

Monitor benchmarks now compare 1 and 2 monitors

  • Property mode set to 100644
File size: 1.4 KB
RevLine 
[9643b31]1#include <fstream>
2#include <stdlib>
3#include <thread>
4
[8cb6fcd]5#include "bench.h"
[9643b31]6
7condition condA;
8condition condB;
[e0b8ccd5]9condition condC;
10condition condD;
[9643b31]11
12monitor mon_t {};
13
14mon_t mon1, mon2;
15
16thread thrdA {};
17thread thrdB {};
[e0b8ccd5]18thread thrdC {};
19thread thrdD {};
[9643b31]20
[e0b8ccd5]21//-------------------------------------------------------------------
22// 1 monitor signal cycle
23void sideA( mon_t * mutex a ) {
[9643b31]24 long long int StartTime, EndTime;
25
26 StartTime = Time();
27 for( int i = 0;; i++ ) {
28 signal(&condA);
29 if( i > N ) break;
30 wait(&condB);
31 }
32 EndTime = Time();
33
[e0b8ccd5]34 sout | ( EndTime - StartTime ) / N;
[9643b31]35}
36
[e0b8ccd5]37void sideB( mon_t * mutex a ) {
[9643b31]38 for( int i = 0;; i++ ) {
39 signal(&condB);
40 if( i > N ) break;
41 wait(&condA);
42 }
43}
44
[e0b8ccd5]45//-------------------------------------------------------------------
46// 2 monitor signal cycle
47void sideC( mon_t * mutex a, mon_t * mutex b ) {
48 long long int StartTime, EndTime;
49
50 StartTime = Time();
51 for( int i = 0;; i++ ) {
52 signal(&condC);
53 if( i > N ) break;
54 wait(&condD);
55 }
56 EndTime = Time();
57
58 sout | ( EndTime - StartTime ) / N | endl;
59}
60
61void sideD( mon_t * mutex a, mon_t * mutex b ) {
62 for( int i = 0;; i++ ) {
63 signal(&condD);
64 if( i > N ) break;
65 wait(&condC);
66 }
67}
68
69void main( thrdA * this ) { sideA( &mon1 ); }
70void main( thrdB * this ) { sideB( &mon1 ); }
71void main( thrdC * this ) { sideC( &mon1, &mon2 ); }
72void main( thrdD * this ) { sideD( &mon1, &mon2 ); }
[9643b31]73
74int main() {
[e0b8ccd5]75 {
76 thrdA a;
77 thrdB b;
78 }
79 {
80 thrdC c;
81 thrdD d;
82 }
[9643b31]83}
Note: See TracBrowser for help on using the repository browser.