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 */
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.