source: doc/theses/colby_parsons_MMAth/benchmarks/waituntil/cfa/order.cfa

Last change on this file was 8b84973, checked in by caparsons <caparson@…>, 2 years ago

updated waituntil benchmarks to use new channel arrow syntax

  • Property mode set to 100644
File size: 1.6 KB
Line 
1#include <select.hfa>
2#include <thread.hfa>
3#include <channel.hfa>
4#include <locks.hfa>
5#include <fstream.hfa>
6#include <stdio.h>
7#include <time.hfa>
8#include <string.h>
9
10size_t ChannelSize = 100, Channels = 2;
11
12channel(size_t) * chans;
13
14size_t globalTotal = 0;
15int cons_counter = 0, prod_counter = 0;
16
17thread SelectConsumer {};
18void main( SelectConsumer & this ) {
19 size_t val, i = 0;
20 try {
21 for(;; i++ ) {
22 waituntil( val << chans[0] ) {} or waituntil( val << chans[1] ) {}
23 }
24 } catch( channel_closed * e ) {}
25 __atomic_fetch_add( &globalTotal, i, __ATOMIC_SEQ_CST );
26}
27
28thread SelectProducer {};
29void main( SelectProducer & this ) {
30 try {
31 for( size_t i = 0;; i++ ) {
32 waituntil( chans[0] << i ) {} or waituntil( chans[1] << i ) {}
33 }
34 } catch( channel_closed * e ) {}
35}
36
37thread Consumer {};
38void main( Consumer & this ) {
39 size_t val, i = 0;
40 try {
41 for(;; i++ ) {
42 remove( chans[1] );
43 }
44 } catch( channel_closed * e ) {}
45 __atomic_fetch_add( &globalTotal, i, __ATOMIC_SEQ_CST );
46}
47
48thread Producer {};
49void main( Producer & this ) {
50 try {
51 for( size_t i = 0;; i++ ) {
52 insert( chans[1], i );
53 }
54 } catch( channel_closed * e ) {}
55}
56
57int main( int argc, char * argv[] ) {
58 processor p[3];
59
60 chans = aalloc( Channels );
61 for ( i; Channels )
62 chans[i]{ ChannelSize };
63
64 {
65 Producer p;
66 SelectProducer sp;
67 Consumer c;
68 SelectConsumer sc;
69
70 sleep(10`s);
71
72 for ( i; Channels )
73 close( chans[i] );
74 }
75 adelete( chans );
76 printf("%zu\n", globalTotal);
77}
Note: See TracBrowser for help on using the repository browser.