Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <pthread.h> //do obslugi watkow
- #include <stdio.h> //do obslugi plikow
- #include <unistd.h> //do usypiana watkow
- #include <string.h> // obslugi napisow
- pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; // inicjalizacja mutexa
- char common[100]; //tablica pomocnicza
- int isFinished = 0; //czy wszystkie watki zakonczyly czytanie
- int isAvailable = 1; // czy bufor jest dostepny
- void* funkcjaWatku(void* arg) {
- while(1) {
- usleep(300);
- pthread_mutex_lock(&lock);
- printf("%d: %s", (int)pthread_self(), common);
- fputs(common, arg);
- isFinished=isFinished+1;
- if (isFinished==3) {
- isAvailable = 1;
- isFinished = 0;
- }
- pthread_mutex_unlock(&lock);
- }
- }
- int main() {
- //blok programu pobierajacy nazwe pliku wejsciowego od uzytkownika
- printf("Podaj nazwę pliku: ");
- char inputName[100];
- scanf("%s", inputName);
- //blok programu otwierajacy plik wejsciowy, oraz pliki wyjsciowe
- FILE* input = fopen(inputName, "r");
- FILE* output1 = fopen("KAROL1", "w");
- FILE* output2 = fopen("KAROL2", "w");
- FILE* output3 = fopen("KAROL3", "w");
- //blok programu tworzacy watki typu detached
- pthread_t watek1;
- pthread_t watek2;
- pthread_t watek3;
- pthread_create(&watek1, NULL, funkcjaWatku, output1);
- pthread_create(&watek2, NULL, funkcjaWatku, output2);
- pthread_create(&watek3, NULL, funkcjaWatku, output3);
- pthread_detach(watek1);
- pthread_detach(watek2);
- pthread_detach(watek3);
- //petla zapisujaca plik wejsciowy do buforu
- usleep(150);
- char tmp[100];
- while(fgets(tmp, 100, input)) {
- pthread_mutex_lock(&lock);
- if (isAvailable==1) {
- strcpy(common, tmp);
- isAvailable = 0;
- }
- pthread_mutex_unlock(&lock);
- usleep(300);
- }
- //zakonczenie programu
- pthread_mutex_destroy(&lock);
- fclose(output1);
- fclose(output2);
- fclose(output3);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement