ulvis.paste.net

Paste Search Dynamic
Recent pastes
InitMethod
  1. #pragma
  2. #include <iostream>
  3. #include <pthread.h>
  4. #include <vector>
  5. #include <cstdlib>
  6. #include <stdlib.h>
  7. #include <stdio.h>
  8. #include <semaphore.h>
  9. #include <string.h>
  10. #define BUFF_SZ_VALUE 10
  11.  
  12.  
  13. void InitMethod();
  14. void *ProducerCalc(void *);
  15. void *ConsumeCal(void *);
  16. int InsertMethod(int);
  17. int RemoveMethod(int *);
  18. int iCountValue;
  19. pthread_mutex_t mutex;
  20. sem_t full, empty;
  21. int buffer[BUFF_SZ_VALUE];
  22.  
  23. void InitMethod()
  24. {
  25.         pthread_mutex_init(&mutex, null);
  26.         sem_init(&full, 0, 0);
  27.         sem_init(&empty, 0, BUFF_SZ_VALUE);
  28.  
  29.         iCountValue = 0;
  30. }
  31.  
  32. int InsertMethod(int itemVal)
  33. {
  34.         if (iCountValue < BUFF_SZ_VALUE)
  35.         {
  36.                 buffer[iCountValue] = itemVal;
  37.                 iCountValue++;
  38.                 return 1;
  39.         }
  40.         else {
  41.                 return -1;
  42.         }
  43.  
  44. }
  45.  
  46.  
  47. int RemoveMethod(int *itemVal)
  48. {
  49.         if (iCountValue > 0)
  50.         {
  51.                 *itemVal = buffer[iCountValue - 1];
  52.                 iCountValue--;
  53.                 return 1;
  54.         }
  55.         else {
  56.                 return -1;
  57.         }
  58. }
  59.  
  60. void * ProducerCalc(void * Param)
  61. {
  62.         int itemVal;
  63.  
  64.         while (1)
  65.         {
  66.  
  67.                 itemVal = rand() % 100;
  68.                 sem_wait(&empty);
  69.                 pthread_mutex_lock(&mutex);
  70.                 int message = InsertMethod(itemVal);
  71.  
  72.                 if (message == -1) {
  73.                         printf("Error while Inserting an itemVal \n");
  74.                 }
  75.                 else
  76.                 {
  77.                         printf("Produced itemVal :: %d Thread No :: %d\n", itemVal, *((int *)Param));
  78.                 }
  79.                 pthread_mutex_unlock(&mutex);
  80.                 sem_post(&full);
  81.  
  82.         }
  83. }
  84.  
  85. void * ConsumeCal(void * Param)
  86. {
  87.         int itemVal;
  88.  
  89.         while (1)
  90.         {
  91.  
  92.                 sem_wait(&full);
  93.                 pthread_mutex_lock(&mutex);
  94.                 int message = RemoveMethod(&itemVal);
  95.  
  96.                 if (message == -1) {
  97.                         printf("Error while deleting itemVal \n");
  98.                 }
  99.                 else
  100.                 {
  101.                         printf("Consumed itemVal :: %d Thread No :: %d \n", itemVal, *((int *)Param));
  102.                 }
  103.                 pthread_mutex_unlock(&mutex);
  104.                 sem_post(&empty);
  105.  
  106.         }
  107. }
  108.  
  109. int main(int argc, char * argv[])
  110. {
  111.         InitMethod();
  112.         pthread_t ProducerThread;
  113.         pthread_t ConsumerThread;
  114.         int *arrayVal = new int[10];
  115.         for (int iObj = 0; iObj < 10; iObj++)
  116.         {
  117.                 arrayVal[iObj] = iObj;
  118.                 pthread_t t;
  119.                 pthread_create(&t, null, ProducerCalc, &arrayVal[iObj]);
  120.                 printf("Creating Producer %d \n", iObj);
  121.         }
  122.         int *boundBuffer = new int[10];
  123.         for (int iObj = 0; iObj < 10; iObj++)
  124.         {
  125.                 boundBuffer[iObj] = iObj;
  126.                 pthread_t t;
  127.                 pthread_create(&t, null, ConsumeCal, &boundBuffer[iObj]);
  128.                 printf("Creating Consumer %d \n", iObj);
  129.         }
  130.  
  131.         delete[] arrayVal;
  132.         delete[] boundBuffer;
  133.         system("pause");
  134.         return 0;
  135. }
Parsed in 0.024 seconds