source:
tests/concurrency/channels/daisy_chain.cfa@
1a40870
Last change on this file since 1a40870 was d923fca, checked in by , 8 months ago | |
---|---|
|
|
File size: 1.5 KB |
Rev | Line | |
---|---|---|
[9319a23] | 1 | #include <locks.hfa> |
2 | #include <fstream.hfa> | |
3 | #include <stdio.h> | |
4 | #include <channel.hfa> | |
5 | #include <thread.hfa> | |
6 | #include <time.hfa> | |
7 | #include <string.h> | |
8 | ||
9 | size_t total_operations = 0; | |
[50be8af5] | 10 | ssize_t Processors = 1, Tasks = 4; // must be signed |
[9319a23] | 11 | |
12 | owner_lock o; | |
13 | ||
14 | typedef channel( int ) Channel; | |
15 | ||
16 | Channel * chain; | |
17 | ||
18 | thread Task {}; | |
[d923fca] | 19 | void main(Task &) { |
[9319a23] | 20 | size_t runs = 0; |
[5adb277] | 21 | int token = 0; |
[9319a23] | 22 | try{ |
23 | for ( ;; ) { | |
[5adb277] | 24 | token << *chain; |
[cb344f7] | 25 | *chain << token; |
[9319a23] | 26 | runs++; |
27 | } | |
28 | } catch ( channel_closed * e ) {} | |
29 | lock( o ); | |
30 | total_operations += runs; | |
31 | unlock( o ); | |
32 | } | |
33 | ||
34 | ||
35 | int main( int argc, char * argv[] ) { | |
36 | switch ( argc ) { | |
37 | case 3: | |
38 | if ( strcmp( argv[2], "d" ) != 0 ) { // default ? | |
[50be8af5] | 39 | Tasks = ato( argv[2] ); |
[d96f7c4] | 40 | if ( Tasks < 1 ) fallthrough default; |
[9319a23] | 41 | } // if |
[d923fca] | 42 | fallthrough; |
[9319a23] | 43 | case 2: |
44 | if ( strcmp( argv[1], "d" ) != 0 ) { // default ? | |
[50be8af5] | 45 | Processors = ato( argv[1] ); |
[d96f7c4] | 46 | if ( Processors < 1 ) fallthrough default; |
[9319a23] | 47 | } // if |
[d923fca] | 48 | fallthrough; |
[9319a23] | 49 | case 1: // use defaults |
50 | break; | |
51 | default: | |
[50be8af5] | 52 | exit | "Usage: " | argv[0] |
[9319a23] | 53 | | " [ processors (> 0) | 'd' (default " | Processors |
54 | | ") ] [ channel size (>= 0) | 'd' (default " | Tasks | |
55 | | ") ]" ; | |
56 | } // switch | |
57 | processor proc[Processors - 1]; | |
58 | ||
59 | sout | "start"; | |
60 | Channel chainChan{ 1 }; | |
61 | ||
[cb344f7] | 62 | chainChan << ((int)0); |
[9319a23] | 63 | |
64 | chain = &chainChan; | |
65 | { | |
66 | Task t[Tasks]; | |
67 | sleep(10`s); | |
68 | close( chainChan ); | |
69 | } | |
70 | ||
71 | // sout | total_operations; | |
72 | sout | "done"; | |
[50be8af5] | 73 | } |
Note:
See TracBrowser
for help on using the repository browser.