source: tests/concurrent/waitfor/simple.cfa@ cca034e

ADT ast-experimental
Last change on this file since cca034e was 107b01a, checked in by Thierry Delisle <tdelisle@…>, 7 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: 1.5 KB
Line 
1#include <fstream.hfa>
2#include <kernel.hfa>
3#include <monitor.hfa>
4#include <stdlib.hfa>
5#include <thread.hfa>
6
7#include <time.h>
8
9static const unsigned long N = 500ul;
10
11#ifndef PREEMPTION_RATE
12#define PREEMPTION_RATE 10`ms
13#endif
14
15Duration default_preemption() {
16 return PREEMPTION_RATE;
17}
18
19monitor global_t {};
20
21global_t globalA;
22
23thread Acceptor {};
24thread Acceptee {};
25
26volatile bool done;
27
28//----------------------------------------------------------------------------------------------------
29// Acceptor
30void do_notify( global_t * mutex a );
31
32void do_wait( global_t * mutex a ) {
33 sout | "Waiting to accept";
34 yield( random( 10 ) );
35
36 sout | "Accepting";
37
38 __acceptable_t acceptable;
39 acceptable.func = (fptr_t)do_notify;
40 acceptable.count = 1;
41 acceptable.monitors = &a;
42
43 __waitfor_internal( 1, &acceptable );
44
45 sout | "Accepted";
46 yield( random( 10 ) );
47}
48
49void main( Acceptor* this ) {
50 for( int i = 0; i < N; i++ ) {
51 do_wait( &globalA );
52 sout | i;
53 }
54
55 done = true;
56}
57
58//----------------------------------------------------------------------------------------------------
59// Acceptee
60void do_notify( global_t * mutex a ) {
61
62}
63
64void main( Acceptee* this ) {
65 while( !done ) {
66 yield( random( 10 ) );
67 do_notify( &globalA );
68 yield( random( 10 ) );
69 }
70}
71
72//----------------------------------------------------------------------------------------------------
73// Main
74int main(int argc, char* argv[]) {
75 done = false;
76 srandom( time( NULL ) );
77 printf("%p\n", &globalA);
78 sout | "Starting";
79 {
80 Acceptor r;
81 Acceptee e[13];
82
83 }
84 sout | "Done";
85}
Note: See TracBrowser for help on using the repository browser.