Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. #include <pthread.h> //do obslugi watkow
  2. #include <stdio.h> //do obslugi plikow
  3. #include <unistd.h> //do usypiana watkow
  4. #include <string.h> // obslugi napisow
  5.  
  6. pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; // inicjalizacja mutexa
  7. char common[100]; //tablica pomocnicza
  8. int isFinished = 0; //czy wszystkie watki zakonczyly czytanie
  9. int isAvailable = 1; // czy bufor jest dostepny
  10.  
  11. void* funkcjaWatku(void* arg) {
  12. while(1) {
  13. usleep(300);
  14. pthread_mutex_lock(&lock);
  15. printf("%d: %s", (int)pthread_self(), common);
  16. fputs(common, arg);
  17.  
  18.  
  19. isFinished=isFinished+1;
  20. if (isFinished==3) {
  21. isAvailable = 1;
  22. isFinished = 0;
  23. }
  24. pthread_mutex_unlock(&lock);
  25. }
  26. }
  27.  
  28. int main() {
  29. //blok programu pobierajacy nazwe pliku wejsciowego od uzytkownika
  30. printf("Podaj nazwę pliku: ");
  31. char inputName[100];
  32. scanf("%s", inputName);
  33. //blok programu otwierajacy plik wejsciowy, oraz pliki wyjsciowe
  34. FILE* input = fopen(inputName, "r");
  35. FILE* output1 = fopen("KAROL1", "w");
  36. FILE* output2 = fopen("KAROL2", "w");
  37. FILE* output3 = fopen("KAROL3", "w");
  38. //blok programu tworzacy watki typu detached
  39. pthread_t watek1;
  40. pthread_t watek2;
  41. pthread_t watek3;
  42. pthread_create(&watek1, NULL, funkcjaWatku, output1);
  43. pthread_create(&watek2, NULL, funkcjaWatku, output2);
  44. pthread_create(&watek3, NULL, funkcjaWatku, output3);
  45. pthread_detach(watek1);
  46. pthread_detach(watek2);
  47. pthread_detach(watek3);
  48. //petla zapisujaca plik wejsciowy do buforu
  49. usleep(150);
  50. char tmp[100];
  51. while(fgets(tmp, 100, input)) {
  52. pthread_mutex_lock(&lock);
  53. if (isAvailable==1) {
  54. strcpy(common, tmp);
  55. isAvailable = 0;
  56. }
  57. pthread_mutex_unlock(&lock);
  58. usleep(300);
  59. }
  60. //zakonczenie programu
  61. pthread_mutex_destroy(&lock);
  62. fclose(output1);
  63. fclose(output2);
  64. fclose(output3);
  65. return 0;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement