Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <pthread.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5.  
  6.  
  7. int odp1=0;
  8.  
  9. void *thread_function(void *arg) {
  10.  
  11. //int i=0;
  12. //for (i=0;i<4;i++){
  13.  
  14. //printf ("%d\n",tablica[cnt]);
  15.  
  16. int* tablica = (int*)arg;
  17.  
  18.  
  19. printf("pierwszy wezel: %d running.\n", tablica[0]);
  20.  
  21.  
  22.  
  23. sleep(1+1);
  24.  
  25. odp1 = tablica[0]*tablica[0];
  26. printf ("odp1 to %d\n",odp1);
  27. int odp2 = tablica[1]*tablica[1];
  28. printf ("odp2 to %d\n",odp2);
  29. odp1 = odp1+odp2;
  30.  
  31. printf("wezel: %d done.\n", tablica[0]);
  32. printf("wynik to %d\n",odp1);
  33.  
  34.  
  35.  
  36. pthread_exit(&odp1);
  37.  
  38. return NULL;
  39.  
  40. }
  41.  
  42. int main(int argc, char **argv)
  43. {
  44. int i;
  45. for (i=0;i<(argc-1);i++)
  46. {
  47. if (atoi(argv[i+1])==0)
  48. {
  49. printf("Podaj wartosci liczbowe\n");
  50. return 1;
  51. }
  52. }
  53. printf("argc = %d\n", argc);
  54.  
  55. int tablica[argc];
  56. for (i = 0; i < argc-1; i++)
  57. {
  58. tablica[i]=atoi(argv[i+1]);
  59.  
  60. printf("tablica[%d] = %d\n", i, tablica[i]);
  61. }
  62.  
  63. int argumenty=argc-1;
  64. printf ("ilosc argumentow= %d\n",argumenty);
  65. if (argumenty%2==1){
  66. argumenty=(argumenty+1)/2;
  67. printf("liczba watkow = %d\n",argumenty);}
  68. else {
  69. argumenty=argumenty/2;
  70. printf("liczba watkow = %d\n",argumenty);}
  71.  
  72.  
  73. int COUNT=argumenty;
  74.  
  75. int err;
  76.  
  77. int cnt;
  78.  
  79. pthread_t p_thread[COUNT];
  80.  
  81. int *odp[2];
  82.  
  83.  
  84. for(cnt = 0,i = 0; cnt < COUNT, i < COUNT; cnt++,i+2){
  85.  
  86.  
  87.  
  88. err = pthread_create(&p_thread[cnt], NULL, &thread_function, &tablica[i]);
  89.  
  90.  
  91.  
  92. if(err != 0)
  93.  
  94. fprintf(stderr, "Error creating the thread");
  95.  
  96. }
  97.  
  98. for(cnt = 0; cnt < COUNT; cnt++) {
  99.  
  100. pthread_join(p_thread[cnt], (void **)&(odp[cnt]));
  101.  
  102. }
  103.  
  104.  
  105.  
  106.  
  107.  
  108. //fprintf(stdout, "All threads completed.\n First thread returned %d.\n Second thread returned %d.\n", *odp[0], *odp[1]);
  109.  
  110.  
  111. return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement