00001 #include <j2k/Fred/Standard.hpp>
00002 #include <j2k/Fred/Error/JError.cpp>
00003 #include <j2k/445/Posix/Basic_PThread.cpp>
00004 #include <j2k/445/Posix/RWLock.hpp>
00005
00006 #define MAX 100000
00007
00008
00009 RWLock r;
00010 long p = 100;
00011
00012 class Fred : public Basic_PThread
00013 {
00014 public:
00015 Fred( char* n = ".", char c = '*' ) : Basic_PThread(),
00016 s( n ), k( c ) { }
00017
00018 virtual void run() {
00019 for(;;) {
00020 printf(",");
00021 r.write();
00022 p += s[0];
00023 printf( "%c", k );
00024 printf( "Write:%s", s );
00025 printf( "%c", k );
00026 printf(",");
00027 sched_yield();
00028 r.releaseWrite();
00029 }
00030 }
00031
00032 char* s;
00033 char k;
00034 };
00035
00036 class Reader : public Basic_PThread
00037 {
00038 public:
00039 Reader( char* n = ".", char c = '*' ) : Basic_PThread(),
00040 s( n ), k( c ) { }
00041
00042 virtual void run() {
00043 for(;;) {
00044 printf(",");
00045 r.read();
00046 printf( "%c", k );
00047 printf( "Read^%d^", p );
00048 printf( "%c", k );
00049 printf(",");
00050 sched_yield();
00051 r.releaseRead();
00052 }
00053 }
00054
00055 char* s;
00056 char k;
00057 };
00058
00059
00060 int main( int argc = 0, char* argv[] = NULL)
00061 {
00062 Fred* t1 = new Fred( "0", '[' );
00063 Fred* t2 = new Fred( "1", '(' );
00064 Fred* t3 = new Fred( "2", '|' );
00065
00066 Reader* r1 = new Reader( "3", '[' );
00067 Reader* r2 = new Reader( "4", '(' );
00068 Reader* r3 = new Reader( "5", '|' );
00069
00070 t1->start();
00071 t2->start();
00072 t3->start();
00073
00074 r1->start();
00075 r2->start();
00076 r3->start();
00077
00078 printf("t1-2-3 started.\n\n");
00079
00080 int max = MAX;
00081
00082 if ( argc > 1 )
00083 {
00084 printf("max = %s, %d", argv[1], argc );
00085 max = atoi( argv[1] );
00086 if ( max < 10 ) max = MAX;
00087 }
00088
00089 for( int i = 0; i < max; i++ ) {
00090 printf( "." );
00091
00092
00093 }
00094
00095 return 0;
00096 }