diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/producerconsumer_8c_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/producerconsumer_8c_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,118 @@ + + + + +TB9.2 Example Applications: examples/PIPS/opencproducerconsumerex/src/producerconsumer.c Source File + + + + + +

examples/PIPS/opencproducerconsumerex/src/producerconsumer.c

Go to the documentation of this file.
00001 
+00016 /* INCLUDE FILES */
+00017 #include <pthread.h>
+00018 #include <errno.h>
+00019 #include <unistd.h>
+00020 #include <fcntl.h>
+00021 #include <sys/stat.h>
+00022 #include <sys/types.h>
+00023 #include <sys/ioctl.h>
+00024 #include <stdio.h>
+00025 #include <stdlib.h>
+00026 //#include <staticlibinit_gcce.h>
+00027 #include "CommanHeader.h"
+00028 
+00029 int main() 
+00030 {
+00031         ThreadParam threadParams[MAX_CLIENTS + 1];
+00032         pthread_t threadID[MAX_CLIENTS + 1];
+00033         int i = 0;
+00034         int noOfConsumers = 0;
+00035         int noOfItems = 0;
+00036         int totalItems = 0;
+00037         int ret = 0;
+00038         int exitReason = 0;
+00039         sem_t semLock;
+00040         pthread_attr_t threadAttr;
+00041 
+00042         if( sem_init( &semLock, 0, 1 ) != 0 ) 
+00043         {
+00044                 printf("Error Creating semaphore");
+00045                 exit(-1);
+00046         }
+00047 
+00048         /* Read all the inputs needed */
+00049         printf("Enter Number of Consumers : ");
+00050         scanf("%d", &noOfConsumers);
+00051 
+00052         if(MAX_CLIENTS < noOfConsumers) 
+00053         {
+00054                 noOfConsumers = MAX_CLIENTS;
+00055         }
+00056 
+00057         for(i=1; i<=noOfConsumers; i++) 
+00058         {
+00059                 printf("Items Needed by Consumer-%d : ", i);
+00060                 scanf("%d", &noOfItems);
+00061                 totalItems += noOfItems;
+00062 
+00063                 threadParams[i].noOfItems = noOfItems;
+00064                 threadParams[i].itemLock = semLock;
+00065                 threadParams[i].noOfConsumers = i;
+00066         }
+00067 
+00068         /* For the Producer      */
+00069         threadParams[0].noOfItems = totalItems;
+00070         threadParams[0].noOfConsumers = noOfConsumers;
+00071         threadParams[0].itemLock = semLock;
+00072 
+00073         pthread_attr_init( &threadAttr );
+00074         pthread_attr_setdetachstate( &threadAttr, PTHREAD_CREATE_JOINABLE );
+00075         
+00076         /* Create a Producer thread now */
+00077         ret = pthread_create( &threadID[0], &threadAttr, ProducerThreadEntryPoint, 
+00078                 (void*)&threadParams[0] );
+00079 
+00080         if(ret != 0) 
+00081         {
+00082                 printf("Error Creating Producer Thread");
+00083                 exit(-1);
+00084         }
+00085 
+00086         /* Create a Consumer Threads now */
+00087         for(i=1; i <= noOfConsumers; i++) 
+00088         {
+00089                 ret = pthread_create( &threadID[i], &threadAttr, ConsumerThreadEntryPoint, 
+00090                         (void*)&threadParams[i] );
+00091 
+00092                 if(ret != 0) 
+00093                 {
+00094                         printf("Error Creating Consumer Thread %d", i);
+00095                         exit(-1);
+00096                 }
+00097         }
+00098 
+00099         /* Call C++ function that creats Observer Thread */
+00100         CreateObserverThread (totalItems * 2);
+00101 
+00102         /* Wait for the completion of all the threads */
+00103         for(i=0; i<=noOfConsumers; i++) 
+00104         {
+00105                 ret = pthread_join(threadID[i], (void**)&exitReason );
+00106         }
+00107 
+00108         /* Destroy the semaphore */
+00109         sem_destroy( &semLock );
+00110         printf("Completed the Production/Consumption..\n Press Any Key to Exit");
+00111         getchar();
+00112         getchar();
+00113         return 0;
+00114 }
+00115 
+00116 /*  End of File */
+
+
Generated by  + +doxygen 1.6.2
+ +