Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<pthread.h>
  4. #include<stdlib.h>
  5. #include<unistd.h>
  6.  
  7. int counter;
  8. int gold = 0;
  9. pthread_mutex_t lock;
  10. int minegold = 50;
  11.  
  12. void* Mine(void *arg)
  13. {
  14. long id = (long) arg;
  15. int i=0;
  16. for(; minegold >= 0; minegold-=10){
  17. pthread_mutex_trylock(&lock);
  18. if(minegold <= 0){
  19. break;
  20. }
  21. gold+=10;
  22. printf("Miner %ld gathered 10 gold from Mine 1 \n",id + 1);
  23. pthread_mutex_unlock(&lock);
  24.  
  25. sleep(1);
  26. }
  27.  
  28.  
  29. return NULL;
  30. }
  31.  
  32.  
  33.  
  34. int main(int argc, char* argv[])
  35. {
  36.  
  37. int num1;
  38. int num2;
  39.  
  40. pthread_t* miner;
  41. pthread_t* seller;
  42. if(argc == 3){
  43. int i = 0;
  44. int *index = NULL;
  45. if (argv[1])
  46. num1 = atoi(argv[1]);
  47.  
  48. index = calloc (num1, sizeof (int));
  49. for(i = 0; i < num1; i++)
  50. {
  51. index[i] = i;
  52. }
  53.  
  54. miner = malloc(sizeof(pthread_t)*num1);
  55.  
  56.  
  57. i = 0;
  58.  
  59.  
  60. if (argv[2])
  61. num2 = atoi(argv[2]);
  62.  
  63. index = calloc (num2, sizeof (int));
  64. for(i = 0; i < num2; i++)
  65. {
  66. index[i] = i;
  67. }
  68.  
  69. seller = malloc(sizeof(pthread_t)*num2);
  70. }
  71. else{
  72. int i = 0;
  73. int *index = NULL;
  74. num1=num2 = 2;
  75.  
  76. index = calloc (num1, sizeof (int));
  77. for(i = 0; i < num1; i++)
  78. {
  79. index[i] = i;
  80. }
  81.  
  82. miner = malloc(sizeof(pthread_t)*num1);
  83.  
  84. /*
  85. i = 0;
  86.  
  87.  
  88. index = calloc (num2, sizeof (int));
  89. for(i = 0; i < num2; i++)
  90. {
  91. index[i] = i;
  92. }
  93.  
  94. seller = malloc(sizeof(pthread_t)*num2);
  95.  
  96. */
  97. }
  98.  
  99. // argv[2] miner
  100. // argv[3] seller
  101. long i = 0;
  102. int err;
  103.  
  104.  
  105. if (pthread_mutex_init(&lock, NULL) != 0)
  106. {
  107. printf("\n mutex init failed\n");
  108. return 1;
  109. }
  110. for( i = 0; i < num1; i++){
  111. err = pthread_create(&(miner[i]), NULL, &Mine, (void*) i);
  112. if (err != 0)
  113. printf("\ncan't create thread :[%s]", strerror(err));
  114. }
  115. /*
  116. for( i = 0; i < num2; i++){
  117.  
  118. err = pthread_create(&(seller[i]), NULL, &Sell, (void*) i);
  119. if (err != 0)
  120. printf("\ncan't create thread :[%s]", strerror(err));
  121. }
  122. */
  123. for( i =0 ;i < num1; i++)
  124. pthread_join(miner[i], NULL);
  125. /*
  126. for( i =0 ;i < num2; i++)
  127. pthread_join(seller[i], NULL);
  128. */
  129. pthread_mutex_destroy(&lock);
  130.  
  131. printf("Gold: %d\n",gold);
  132. free(miner);
  133.  
  134.  
  135. return 0;
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement