Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

C:/temp/src/j2k/Posix/LockTest.cpp

Go to the documentation of this file.
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 //   sched_yield();
00093   }
00094 
00095   return 0;
00096 }

Generated on Sun Oct 14 18:46:40 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001