Wątki. S. Samolej: Wątki 1
|
|
- Ludwika Stachowiak
- 7 lat temu
- Przeglądów:
Transkrypt
1 Wątki dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: oraz na materiałach opracowanych przez dr inż. Jędrzeja Ułasiewicza: jedrzej.ulasiewicz.staff.iiar.pwr.wroc.pl S. Samolej: Wątki 1
2 Potrzeba wprowadzania wątków W pewnych przypadkach tworzenie programów złożonych z wielu ciężkich procesów uważane jest za mało wydajne. Oczekuje się możliwości tworzenia aplikacji współbieżnych, które w bardziej naturalny sposób współdzielą pamięć i zasoby. Niektóre systemy operacyjne nie dysponują tak szerokim zestawem mechanizmów programowania współbieżnego opartych na współpracy procesów jak Unix i udostępniają mechanizmy programowania współbieżnego tylko na bazie wątków. S. Samolej: Wątki 2
3 Definicja wątku Sekwencja działań, która może wykonywać się równolegle z innymi sekwencjami działań w kontekście danego procesu (programu). Tworzenie wątku a instrukcja fork Po uruchomieniu funkcji fork tworzony jest osobny proces z własnym zestawem zmiennych (odziedziczonych po rodzicu) i własnym identyfikatorem proces (PID). Po utworzeniu nowego wątku w procesie, otrzymuje on nowy stos (zmienne lokalne) ale współdzieli z innymi zmienne globalne, deskryptory plików, funkcje przechwytujące sygnały i stan bieżącego katalogu i procesu. S. Samolej: Wątki 3
4 Zalety stosowania wątków Mniejszy nakład obliczeniowy ze strony systemu operacyjnego Możliwość tworzenia aplikacji, które mają wiele wątków pracujących na wspólnych danych lub zasobach (serwer bazy danych, serwer WWW, przetwarzanie w tle tekstu, zapis stanu jednostek w grach strategicznych itp.) Możliwość wydzielenia w aplikacji osobnych wątków pobierających dane, wysyłających dane i przetwarzających dane. Przetwarzanie może się odbywać, gdy operacje odczytu/zapisu są zablokowane. Przełączanie pomiędzy wątkami wymaga znacznie mniejszego nakładu obliczeniowego od SO S. Samolej: Wątki 4
5 Wady stosowania wątków Tworzenie programów wielowątkowych wymaga precyzyjnego projektowania, ponieważ łatwo nieprzewidywalne wyniki spowodowane dostępem do zmiennych w czasie i przestrzeni Utrudnione jest śledzenie takich programów Aplikacja wielowątkowa na jednoprocesorowym komputerze nie musi działać szybciej niż jej jednowątkowa wersja. S. Samolej: Wątki 5
6 Uwagi do tworzenia aplikacji wielowątkowych Należy włączyć bibliotekę pthread do opcji konsolidacji Należy włączyć makro: _REENTRANT (fragmenty kodu typu re-entrant mogą być równocześnie wywoływane przez wiele wątków w programie i nie zaszkodzi to ich spójności) #include <pthread.h> int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); S. Samolej: Wątki 6
7 #include <pthread.h> void pthread_exit(void *retval); Kończenie pracy wątku Atrybuty: retval identyfikator wątku (można się jeszcze do niego odwołać, choć wątek zakończył działanie) Uwaga: Jako parametr retval nie należy podawać zmiennych lokalnych. Oczekiwanie na zakończenie wątku #include <pthread.h> int pthread_join(pthread_t th, void **thread_return); Atrybuty: th identyfikator wątku, na który oczekujemy thread_return wskaźnik na wskaźnik pokazujący na wartość zwracaną przez wątek Funkcja zwraca: 0 sukces, lub kod błędu. S. Samolej: Wątki 7
8 #include <string.h> #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> void *thread_function(void *arg); char message[] = "Hello World"; Pierwszy program wielowątkowy int main() { int res; pthread_t a_thread; void *thread_result; res = pthread_create(&a_thread, NULL, thread_function, (void *)message); if (res!= 0) { perror("thread creation failed"); exit(exit_failure); printf("waiting for thread to finish...\n"); res = pthread_join(a_thread, &thread_result); if (res!= 0) { perror("thread join failed"); exit(exit_failure); printf("thread joined, it returned %s\n", (char *) thread_result); printf("message is now %s\n", message); exit(exit_success); void *thread_function(void *arg) { printf("thread_function is running. Argument was %s\n", (char *)arg); sleep(3); strcpy(message, "Bye!"); pthread_exit("thank you for the CPU time"); $./thread1 Waiting for thread to finish... thread_function is running. Argument was Hello World Thread joined, it returned Thank you for the CPU time Message is now Bye! S. Samolej: Wątki 8
9 Jak to działa? thread_function jest funkcją, która rozpocznie działanie w nowym wątku W funkcji powoływany jest nowy wątek, obsługiwany przez thead_function, wątek przyjmuje domyślne parametry (NULL), a do funkcji wykonującej jako parametr zostaje wysłana tablica message Program główny kontynuuje swoje obliczenia i oczekuje na zakończenie utworzonego wątku (pthread_join) Wątek potwierdza odebranie danych przez parametr wywołania funkcji, modyfikuje stan współdzielonej zmiennej i kończy swoje działanie (pthread_exit). Następuje zakończenie programu macierzystego. S. Samolej: Wątki 9
10 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> void *thread_function(void *arg); int run_now = 1; Sprawdzenie, czy wątki się przełączają? int main() { int res; pthread_t a_thread; void *thread_result; int print_count1 = 0; res = pthread_create(&a_thread, NULL, thread_function, (void *)message); if (res!= 0) { perror("thread creation failed"); exit(exit_failure); while(print_count1++ < ) { if (run_now == 1) { printf("1"); run_now = 2; printf("\nwaiting for thread to finish...\n"); res = pthread_join(a_thread, &thread_result); if (res!= 0) { perror("thread join failed"); exit(exit_failure); printf("thread joined\n"); exit(exit_success); void *thread_function(void *arg) { int print_count2 = 0; while(print_count2++ < ) { if (run_now == 2) { printf("2"); run_now = 1; sleep(3); $./thread Waiting for thread to finish... Thread joined S. Samolej: Wątki 10
11 Problem aktywnego czekania Każdy z wątków aplikacji sprawdza stan zmiennej run_now. Jeśli przyjmuje ona zadaną wartość, program wypisuje tę wartość i zmienia na drugą z możliwych Oba wątki wykonują niekorzystne z punktu wydajności systemu aktywne czekanie i próbkowanie stanu zmiennej Większość mocy obliczeniowej procesora zużywana jest na sprawdzanie stanu zmiennej w każdym z wątków. S. Samolej: Wątki 11
12 Synchronizacja z zastosowaniem semaforów #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> #include <semaphore.h> void *thread_function(void *arg); sem_t bin_sem; #define WORK_SIZE 1024 char work_area[work_size]; int main() { int res; pthread_t a_thread; void *thread_result; res = sem_init(&bin_sem, 0, 0); if (res!= 0) { perror("semaphore initialization failed"); exit(exit_failure); res = pthread_create(&a_thread, NULL, thread_function, NULL); if (res!= 0) { perror("thread creation failed"); exit(exit_failure); printf("input some text. Enter 'end' to finish\n"); while(strncmp("end", work_area, 3)!= 0) { fgets(work_area, WORK_SIZE, stdin); sem_post(&bin_sem); printf("\nwaiting for thread to finish...\n"); res = pthread_join(a_thread, &thread_result); if (res!= 0) { perror("thread join failed"); exit(exit_failure); printf("thread joined\n"); sem_destroy(&bin_sem); exit(exit_success); void *thread_function(void *arg) { sem_wait(&bin_sem); while(strncmp("end", work_area, 3)!= 0) { printf("you input %d characters\n", strlen(work_area) -1); sem_wait(&bin_sem); pthread_exit(null); S. Samolej: Wątki 12
13 Wyjście programu $./thread3 Input some text. Enter end to finish The Wasp Factory You input 16 characters Iain Banks You input 10 characters end Waiting for thread to finish... Thread joined S. Samolej: Wątki 13
14 Komentarz W programie rozwiązano problem synchronizacji z zastosowaniem semaforów, podobnie jak na poprzednim wykładzie (str. 13) Wartość początkowa semafora ustawiana jest na 0 Podstawowy wątek cyklicznie odbiera od użytkownika komunikaty tekstowe i zapisuje do bufora, a następnie zwalnia semafor (sem_post). Wątek potomny najpierw oczekuje na zwolnienie semafora (sem_wait), a potem cyklicznie analizuje zawartość bufora z danymi (długość tekstu) i oczekuje na ustawienie semafora (sem_wait). S. Samolej: Wątki 14
15 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> #include <semaphore.h> void *thread_function(void *arg); sem_t bin_sem; #define WORK_SIZE 1024 char work_area[work_size]; int main() { int res; pthread_t a_thread; void *thread_result; res = sem_init(&bin_sem, 0, 0); if (res!= 0) { perror("semaphore initialization failed"); exit(exit_failure); res = pthread_create(&a_thread, NULL, thread_function, NULL); if (res!= 0) { perror("thread creation failed"); exit(exit_failure); Zależności czasowe printf("input some text. Enter 'end' to finish\n"); while(strncmp("end", work_area, 3)!= 0) { if (strncmp(work_area, "FAST", 4) == 0) { sem_post(&bin_sem); strcpy(work_area, "Wheeee..."); else { fgets(work_area, WORK_SIZE, stdin); sem_post(&bin_sem); printf("\nwaiting for thread to finish...\n"); res = pthread_join(a_thread, &thread_result); if (res!= 0) { perror("thread join failed"); exit(exit_failure); printf("thread joined\n"); sem_destroy(&bin_sem); exit(exit_success); void *thread_function(void *arg) { sem_wait(&bin_sem); while(strncmp("end", work_area, 3)!= 0) { printf("you input %d characters\n", strlen(work_area) -1); sem_wait(&bin_sem); pthread_exit(null); S. Samolej: Wątki 15
16 Wyjście programu $./thread4a Input some text. Enter end to finish Excession You input 9 characters FAST You input 7 characters You input 7 characters You input 7 characters end Waiting for thread to finish... Thread joined S. Samolej: Wątki 16
17 Komentarz Kiedy użytkownik wprowadza słowo FAST na wejście programu to następuje zwolnienie semafora, Warunek zakończenia pętli while nie jest spełniony Następuje rozpoznanie, że użytkownik wprowadził wyraz FAST, ponowne zwolnienie semafora, a następnie wprowadzenie do współdzielonej zmiennej tekstu Wheeee.. Ponowny raz semafor zostaje zwolniony Warunek zakończenia pętli while nie jest spełniony Program oczekuje na wprowadzenie nowego tekstu na standardowym wejściu Zmiany zawartości współdzielonej zmiennej odbywają się tak szybko, że wątek obliczający długość tekstu gubi jedną ze zmian. Wątek macierzysty podczas wywoływania funkcji sem_post() zwiększa licznik. W konsekwencji wątek potomny, który wcześniej nie uzyskał dostępu do współdzielonej zmiennej trzykrotnie odblokowuje się na semaforze i wypisuje obliczoną długość tekstu. S. Samolej: Wątki 17
18 Mutexy Wątki dzielą wspólny obszar danych. Stąd współbieżny dostęp do danych może naruszyć ich integralność. Należy zapewnić synchronizację dostępu do wspólnych danych. W bibliotece pthreads do zapewnienia wyłączności dostępu do danych stosuje się mechanizm muteksu (ang. mutex). Nazwa ta pochodzi od słów Mutual exclusion czyli wzajemne wykluczanie. S. Samolej: Wątki 18
19 Funkcje do obsługi mutexów #include <pthread.h> //Inicjalizacja: int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr); // Zamknięcie dostępu do sekcji krytycznej: int pthread_mutex_lock(pthread_mutex_t *mutex)); // Otwarcie dostępu do sekcji krytycznej: int pthread_mutex_unlock(pthread_mutex_t *mutex); // Zniszczenie mutex a int pthread_mutex_destroy(pthread_mutex_t *mutex); Uwagi: Funkcje korzystają ze wcześniej zadeklarowanego obiektu typu: pthread_mutex_t S. Samolej: Wątki 19
20 Przykład ochrona współdzielonych danych z zastosowaniem mutex a #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> #include <semaphore.h> void *thread_function(void *arg); pthread_mutex_t work_mutex; #define WORK_SIZE 1024 char work_area[work_size]; int time_to_exit = 0; int main() { int res; pthread_t a_thread; void *thread_result; res = pthread_mutex_init(&work_mutex, NULL); if (res!= 0) { perror("mutex initialization failed"); exit(exit_failure); res = pthread_create(&a_thread, NULL, thread_function, NULL); if (res!= 0) { perror("thread creation failed"); exit(exit_failure); pthread_mutex_lock(&work_mutex); printf("input some text. Enter 'end' to finish\n"); while(!time_to_exit) { fgets(work_area, WORK_SIZE, stdin); pthread_mutex_unlock(&work_mutex); while(1) { pthread_mutex_lock(&work_mutex); if (work_area[0]!= '\0') { pthread_mutex_unlock(&work_mutex); sleep(1); else { break; pthread_mutex_unlock(&work_mutex); printf("\nwaiting for thread to finish...\n"); res = pthread_join(a_thread, &thread_result); if (res!= 0) { perror("thread join failed"); exit(exit_failure); printf("thread joined\n"); pthread_mutex_destroy(&work_mutex); exit(exit_success); void *thread_function(void *arg) { sleep(1); pthread_mutex_lock(&work_mutex); while(strncmp("end", work_area, 3)!= 0) { printf("you input %d characters\n", strlen(work_area) - 1); work_area[0] = '\0'; pthread_mutex_unlock(&work_mutex); sleep(1); pthread_mutex_lock(&work_mutex); while (work_area[0] == '\0' ) { pthread_mutex_unlock(&work_mutex); sleep(1); pthread_mutex_lock(&work_mutex); time_to_exit = 1; work_area[0] = '\0'; pthread_mutex_unlock(&work_mutex); pthread_exit(0); S. Samolej: Wątki 20
21 Wyjście programu Input some text. Enter end to finish Whit You input 4 characters The Crow Road You input 13 characters end Waiting for thread to finish... Thread joined S. Samolej: Wątki 21
22 Jak to działa? (1) W obszarze zmiennych globalnych zadeklarowano nowe zmienne work_mutex i time_to_exit W głównej funkcji programu zainicjalizowano mutex Powołano nowy wątek który: próbuje zamknąć mutex (jeśli jest zamknięty, to oczekuje na jego otwarcie), sprawdza, czy spełniony jest warunek zakończenia wątku, jeśli tak, ustawia zmienną time_to_exit na 0 i pierwszy element tablicy to odblokowuje work_area na 0, otwiera mutex jeśli nie, to obliczana jest długość tekstu i ustawiana pierwszy element tablicy work_area na 0, następuje tez otwarcie mutex a (ustawienie pierwszego elementu tablicy na 0 oznacza, że wątek zakończył swoje przetwarzanie współdzielonej zmiennej) po odczekaniu 1 sekundy wątek próbuje zamknąć mutex jeśli zamknięcie się powiedzie, to cyklicznie sprawdza, czy pierwszy element tablicy jest w dalszym ciągu 0, zwalnia mutex, odczekuje 1 sekundę, próbuje zamknąć mutex jeśli zawartość tablicy ulegnie zmianie, to pętla sprawdzająca jest przerywana, mutex pozostaje zamknięty S. Samolej: Wątki 22
23 Jak to działa? (2) W wątku macierzystym : następuje próba zamknięcia mutex a kiedy zamknięcie się powiedzie w pętli następuje odczytywanie tekstów wprowadzanych przez użytkownika (tekst end kończy działanie programu) i odblokowanie mutexa w wewnętrznej pętli następuje sprawdzenie, czy tekst nie został przetworzony, sprawdzenie następuje z zachowaniem wzajemnego wykluczania w dostępie do współdzielonej zmiennej (próba zamknięcia a potem otwarcie mutex a) po wykryciu odebrania danych przez wątek przetwarzający następuje ponownie próba przjecia dostępu do danych współdzielonych i wpisanie do nich nowego tekstu po wpisaniu do tablicy współdzielonej tekstu end nstępuje zamknięcie wątku macierzystego i potomnego. Uwagi: Oba wątki stosują swego rodzaju pooling do wykrywania zmiany stanu zmiennej dzielonej, w profesjonalnym rozwiązaniu należy zastosować semafor lub zmienną warunkową (nowość) do synchronizacji S. Samolej: Wątki 23
24 Argumenty wątków (wybrane) #include <pthread.h> // Inicjalizacja możliwości ustlania atrybutów wątków int pthread_attr_init(pthread_attr_t *attr); // Ustalenie sposobu zakończenia wątku: int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate); // Sprawdzenie, w jaki sposób wątek będzie kończony int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate); // Ustalenie sposobu szeregowania wątku: int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy); // Sprawdzenie w jaki sposób wątek będzie szeregowany: int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy); // //... // S. Samolej: Wątki 24
25 Kończenie wątku bez oczekiwania na wspólne zakończenie #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> void *thread_function(void *arg); char message[] = "Hello World"; int thread_finished = 0; int main() { int res; pthread_t a_thread; void *thread_result; pthread_attr_t thread_attr; res = pthread_attr_init(&thread_attr); if (res!= 0) { perror("attribute creation failed"); exit(exit_failure); res = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); if (res!= 0) { perror("setting detached attribute failed"); exit(exit_failure); res = pthread_create(&a_thread, &thread_attr, thread_function, (void *)message); if (res!= 0) { perror("thread creation failed"); exit(exit_failure); (void)pthread_attr_destroy(&thread_attr); while(!thread_finished) { printf("waiting for thread to say it's finished...\n"); sleep(1); printf("other thread finished, bye!\n"); exit(exit_success); void *thread_function(void *arg) { printf("thread_function is running. Argument was %s\n", (char *)arg); sleep(4); printf("second thread setting finished flag, and exiting now\n"); thread_finished = 1; pthread_exit(null); S. Samolej: Wątki 25
26 Wyjście programu $./thread5 Waiting for thread to say it s finished... thread_function is running. Argument was Hello World Waiting for thread to say it s finished... Waiting for thread to say it s finished... Waiting for thread to say it s finished... Second thread setting finished flag, and exiting now Other thread finished, bye! S. Samolej: Wątki 26
27 Komentarz W programie została zainicjalizowana zmienna typu pthread_attr_t Przed uruchomieniem wątku wykonana została funkcja pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED); funkcja zmodyfikowała zmienną thread_attr w taki sposób, że, jeśli zostanie utworzony wątek z tą zmienną jako atrybut, to po jego zakończeniu wątek macierzysty nie będzie oczekiwał na wątek potomny S. Samolej: Wątki 27
28 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> #define NUM_THREADS 6 void *thread_function(void *arg); int main() { int res; pthread_t a_thread[num_threads]; void *thread_result; int lots_of_threads; for(lots_of_threads = 0; lots_of_threads < NUM_THREADS; lots_of_threads++) { Wielo-wielowątkowa aplikacja res = pthread_create(&(a_thread[lots_of_threads]), NULL, thread_function, (void *)&lots_of_threads); if (res!= 0) { perror("thread creation failed"); exit(exit_failure); sleep(1); printf("waiting for threads to finish...\n"); for(lots_of_threads = NUM_THREADS - 1; lots_of_threads >= 0; lots_of_threads--) { res = pthread_join(a_thread[lots_of_threads], &thread_result); if (res == 0) { printf("picked up a thread\n"); else { perror("pthread_join failed"); printf("all done\n"); exit(exit_success); void *thread_function(void *arg) { int my_number = *(int *)arg; int rand_num; printf("thread_function is running. Argument was %d\n", my_number); rand_num=1+(int)(9.0*rand()/(rand_max+1.0)); sleep(rand_num); printf("bye from %d\n", my_number); pthread_exit(null); S. Samolej: Wątki 28
29 Wyjście programu $./thread8 thread_function is running. Argument was 0 thread_function is running. Argument was 1 thread_function is running. Argument was 2 thread_function is running. Argument was 3 thread_function is running. Argument was 4 Bye from 1 thread_function is running. Argument was 5 Waiting for threads to finish... Bye from 5 Picked up a thread Bye from 0 Bye from 2 Bye from 3 Bye from 4 Picked up a thread Picked up a thread Picked up a thread Picked up a thread Picked up a thread All done S. Samolej: Wątki 29
30 Jak to działa? W pętli następuje wygenerowanie NUM_THREADS wątków. Każdy z wątków ustala losowy czas, kiedy ma zakończyć swoje obliczenia Główny program zbiera zakończone wątki (uwaga: wątki kończą si w różnej kolejności, ale zbieranie odbywa się po kolei zgodnie z numerami wątków zapisanymi w tablicy a_thread) S. Samolej: Wątki 30
31 Interesujące zjawisko Interesujące wyniki programu otrzymuje się, gdy zrezygnuje się w nim z wywołań funkcji sleep: okazuje się, że kilka wątków startuje z tą samą wartością przekazywaną im jako parametr wywołania problematyczną linią programu jest: for(lots_of_threads = 0; lots_of_threads < NUM_THREADS; lots_of_threads++) {res = pthread_create(&(a_thread[lots_of_threads]), NULL, thread_function, (void *)&lots_of_threads); do wątku przekazywane jest wskazanie na zmienną, pomimo, że zmienna zmienia się w pętli, komórka pamięci, w której powinien być przechowywany jej stan nie jest aktualizowana Rozwiązanie problemu: res = pthread_create(&(a_thread[lots_of_threads]), NULL, thread_function, (void *)lots_of_threads); Modyfikacji musi też ulec fragment funkcji obsługującej wątek: void *thread_function(void *arg) { int my_number = (int)arg; S. Samolej: Wątki 31
Wątki. S. Samolej: Wątki, producent - konsument 1
Wątki dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: http://wazniak.mimuw.edu.pl/ oraz na materiałach
Problemy czytelników i pisarzy oraz 5 ucztujących filozofów
Problemy czytelników i pisarzy oraz 5 dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: http://wazniak.mimuw.edu.pl/
Temat zajęć: Tworzenie i obsługa wątków.
Temat zajęć: Tworzenie i obsługa wątków. Czas realizacji zajęć: 180 min. Zakres materiału, jaki zostanie zrealizowany podczas zajęć: Tworzenie wątków, przekazywanie parametrów do funkcji wątków i pobieranie
w odróżnieniu od procesów współdzielą przestrzeń adresową mogą komunikować się za pomocą zmiennych globalnych
mechanizmy posix Wątki w odróżnieniu od procesów współdzielą przestrzeń adresową należą do tego samego użytkownika są tańsze od procesów: wystarczy pamiętać tylko wartości rejestrów, nie trzeba czyścić
Problemy czytelników i pisarzy oraz 5 ucztujących filozofów
Problemy czytelników i pisarzy oraz 5 dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: http://wazniak.mimuw.edu.pl/
Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1
Procesy i wątki Krzysztof Banaś Obliczenia równoległe 1 Procesy i wątki Proces: ciąg rozkazów (wątek główny) i ewentualnie inne wątki stos (wątku głównego) przestrzeń adresowa dodatkowe elementy tworzące
1. Uruchom poniższy program tworzący pojedynczy wątek:
9 Wątki 1. Uruchom poniższy program tworzący pojedynczy wątek: #include #include #include void* worker(void* info) int i; for(i=0; i
Problem producentakonsumenta
Problem producentakonsumenta dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: http://wazniak.mimuw.edu.pl/
Programowanie Współbieżne
Programowanie Współbieżne Pthread http://www.unix.org/version2/whatsnew/threadsref.html Oraz strony podręcznika systemowego man 1 Wątki W tradycyjnym modelu w systemie Unix, jeżeli proces wymaga, by część
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO LABORATORIUM Temat: THREADS Mariusz Rudnicki 2016 1. Przygotowanie platformy i środowiska IDE. Przed uruchomieniem własnego kodu zwiększ priorytet procesu qconn
Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.
Przykład: $ ls more Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Tworzenie łącza #include int pipe(int filedes[2]); Przykład: int
Plan wykładu. Obliczenia równoległe w zagadnieniach inżynierskich. Wykład 1 p. Wzajemne wykluczanie. Procesy współbieżne
Plan wykładu Obliczenia równoległe w zagadnieniach inżynierskich Wykład 1 Podstawowe pojęcia i model programowania Sposoby realizacji watków w systemach operacyjnych Tworzenie watów i zarzadzanie nimi
Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory
Dzisiejszy wykład Klasa string wersja prosta wersja ze zliczaniem odwołań Wyjątki Specyfikator volatile Semafory 1 Klasa string Przetwarzanie tekstów jest powszechną dziedziną zastosowań komputerów W języku
Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1
Przetwarzanie wielowątkowe przetwarzanie współbieżne Krzysztof Banaś Obliczenia równoległe 1 Problemy współbieżności wyścig (race condition) synchronizacja realizowana sprzętowo (np. komputery macierzowe)
Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB
Wykład 3 Procesy i wątki Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Pojęcie procesu Program = plik wykonywalny na dysku Proces = uruchomiony i wykonywany program w pamięci
Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska
Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów Iwona Kochańska Mechanizm synchronizacji wątków/procesów Wykorzystanie semaforów zapobiega niedozwolonemu wykonaniu
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011
Procesy Systemy Operacyjne 2 laboratorium Mateusz Hołenko 9 października 2011 Plan zajęć 1 Procesy w systemie Linux proces procesy macierzyste i potomne procesy zombie i sieroty 2 Funkcje systemowe pobieranie
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO LABORATORIUM Temat: QNX Neutrino Interrupts Mariusz Rudnicki 2016 Wstęp W QNX Neutrino wszystkie przerwania sprzętowe przechwytywane są przez jądro systemu. Obsługę
Poniższe funkcje opisane są w 2 i 3 części pomocy systemowej.
Procesy Proces (zwany też zadaniem) jest jednostką aktywną, kontrolowaną przez system operacyjny i związaną z wykonywanym programem. Proces ma przydzielone zasoby typu pamięć (segment kodu, segment danych,
Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1
Programowanie równoległe i rozproszone Monitory i zmienne warunku Krzysztof Banaś Programowanie równoległe i rozproszone 1 Problemy współbieżności Problem producentów i konsumentów: jedna grupa procesów
Systemy Operacyjne 2: Wątki pthreads. dr inż. Arkadiusz Chrobot
Systemy Operacyjne 2: Wątki pthreads dr inż. Arkadiusz Chrobot 18 kwietnia 2013 1. Wprowadzenie Wątki podobnie jak procesy umożliwiają współbieżną realizację czynności w wykonywanym programie. Domyślnie
Podstawy programowania współbieżnego. 1. Wprowadzenie. 2. Podstawowe pojęcia
Podstawy programowania współbieżnego Opracowanie: Sławomir Samolej, Tomasz Krzeszowski Politechnika Rzeszowska, Katedra Informatyki i Automatyki, Rzeszów, 2010 1. Wprowadzenie Programowanie współbieżne
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
procesy odrębne dzielone
procesy odrębne Unikatowy PID (2-32000) Zmienne Zbiory deskryptorów plików Przestrzeń stosu (lokalne zmienne, wywołania funkcji) Środowisko Licznik rozkazów dzielone Kod programu brak możliwości zapisu
Programowanie równoległe i rozproszone. W1. Wielowątkowość. Krzysztof Banaś Programowanie równoległe i rozproszone 1
Programowanie równoległe i rozproszone W1. Wielowątkowość Krzysztof Banaś Programowanie równoległe i rozproszone 1 Problemy współbieżności wyścig (race condition) synchronizacja realizowana sprzętowo (np.
Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1 Metodologia programowania równoległego Przykłady podziałów zadania na podzadania: Podział ze względu na funkcje (functional
Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1
Wątki 1. Wątki - wprowadzenie Wątkiem nazywamy sekwencyjny przepływ sterowania w procesie, który wykonuje dany program np. odczytywanie i zapisywanie plików Program Javy jest wykonywany w obrębie jednego
Wielozadaniowość w systemie Microsoft Windows
Wielozadaniowość w systemie Microsoft Windows mgr inż. Tomasz Jaworski tjaworski@kis.p.lodz.pl http://tjaworski.kis.p.lodz.pl/ Idea wielozadaniowości Proces główny Wątki Algorytm szeregowania ustala kolejność
Funkcja (podprogram) void
Funkcje Co to jest funkcja? Budowa funkcji Deklaracja, definicja i wywołanie funkcji Przykłady funkcji definiowanych przez programistę Przekazywanie argumentów do funkcji Tablica jako argument funkcji
Tworzenie wątków. #include <pthread.h> pthread_t thread;
Wątki Wątek (ang, thread) jest to niezależna sekwencja zdarzeń w obrębie procesu. Podczas wykonywania procesu równolegle i niezależnie od siebie może być wykonywanych wiele wątków. Każdy wątek jest wykonywany
Kurs programowania. Wykład 8. Wojciech Macyna
Wykład 8 Program bez watków, jeden procesor, trzy zadania Program z watkami, jeden procesor, trzy zadania Procesory wielordzeniowe, każde zadanie na osobnym procesorze Trzy zadania uruchomione w watkach
Zaawansowane programowanie w C++ (PCP)
Wykład 10 - boost Thread. 8 czerwca 2007 Równoległość bardzo wolna reakcja człowieka wolne urządzenia wejścia - wyjścia (np. drukarki) bardzo szybkie procesory można przeprowadzać obliczenia podczas obsługi
Aplikacja Sieciowa wątki po stronie klienta
Aplikacja Sieciowa wątki po stronie klienta Na ostatnich zajęciach zajmowaliśmy się komunikacją pomiędzy klientem a serwerem. Wynikiem naszej pracy był program klienta, który za pomocą serwera mógł się
Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17
Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8
Programowanie aplikacji równoległych i rozproszonych. Wykład 1
Wykład 1 p. 1/52 Programowanie aplikacji równoległych i rozproszonych Wykład 1 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Plan wykładu
1. Procesy i współbieżność
1. Procesy i współbieżność Opracował: Sławomir Samolej Politechnika Rzeszowska, Katedra Informatyki i Automatyki, Rzeszów, 2013. 1.1. Wprowadzenie Proces to przestrzeń adresowa i pojedynczy wątek sterujący,
Wstęp do Programowania, laboratorium 02
Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona
Plan wykładu. Programowanie aplikacji równoległych i rozproszonych. Wykład 1 p. Wzajemne wykluczanie. Procesy współbieżne
Plan wykładu Programowanie aplikacji równoległych i rozproszonych Wykład 1 Podstawowe pojęcia i model programowania Sposoby realizacji watków w systemach operacyjnych Tworzenie watów i zarzadzanie nimi
Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.
Wykład 3 ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors. Waldi Ravens J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 75 / 146 deklaracje zmiennych instrukcja podstawienia
UŻYCIE I ZARZĄDZANIE WĄTKAMI
Proces jako pewna instancja programu, w trakcie wykonania, ze swej natury w każdym systemie operacyjnym wyróżniają: prawa własności zasobu a jednym z fundamentalnych zadań systemu jest ochrona przed jednoczesnym
Mechanizmy pracy równoległej. Jarosław Kuchta
Mechanizmy pracy równoległej Jarosław Kuchta Zagadnienia Algorytmy wzajemnego wykluczania algorytm Dekkera Mechanizmy niskopoziomowe przerwania mechanizmy ochrony pamięci instrukcje specjalne Mechanizmy
Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ
Procesy i wątki Proces posiada samodzielne środowisko wykonawcze. Proces posiada własny zestaw podstawowych zasobów w czasie wykonywania; W szczególności, każdy proces ma własną przestrzeń pamięci. W uproszczeniu
Mariusz Rudnicki PROGRAMOWANIE WSPÓŁBIEŻNE I SYSTEMY CZASU RZECZYWISTEGO CZ.4
Mariusz Rudnicki mariusz.rudnicki@eti.pg.gda.pl PROGRAMOWANIE WSPÓŁBIEŻNE I SYSTEMY CZASU RZECZYWISTEGO CZ.4 Synchronizacja wątków Omawiane zagadnienia Czym jest synchronizacja wątków? W jakim celu stosuje
Systemy Operacyjne 1 Laboratorium 2 Procesy i sygnały w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot
Systemy Operacyjne 1 Laboratorium 2 Procesy i sygnały w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot października 2018 Wstęp W tej instrukcji zawarte są informacje na temat tworzenia i obsługiwania
9. Problem wzajemnego wykluczania i sekcji krytycznej
J. Ułasiewicz Programowanie aplikacji współbieżnych 1 9. Problem wzajemnego wykluczania i sekcji krytycznej 9.1 Przeplot i współużywalność zasobów Wyróżniamy dwa rodzaje zasobów: 1. Zasoby współużywalne
Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie drugie (jedne zajęcia) Temat: Procesy i sygnały w Linuksie. Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Budowa procesu
Programowanie współbieżne Wykład 7. Iwona Kochaoska
Programowanie współbieżne Wykład 7 Iwona Kochaoska Poprawnośd programów współbieżnych Właściwości związane z poprawnością programu współbieżnego: Właściwośd żywotności - program współbieżny jest żywotny,
Programowanie wielowątkowe. Jarosław Kuchta
Programowanie wielowątkowe Jarosław Kuchta Procesy i wątki w systemie Windows Windows jest systemem wielowątkowym. Każdy proces ma przynajmniej jeden wątek, chociaż może mieć wiele wątków. Start programu,
UŻYCIE I ZARZĄDZANIE WĄTKAMI
Proces jako pewna instancja programu, w trakcie wykonania, ze swej natury w każdym systemie operacyjnym wyróżniają: prawa własności zasobu a jednym z fundamentalnych zadań systemu jest ochrona przed jednoczesnym
Systemy operacyjne III
Systemy operacyjne III WYKŁAD 3 Jan Kazimirski 1 Współbieżność 2 Współbieżność Wielozadaniowość - zarządzanie wieloma procesami w ramach jednego CPU Wieloprocesorowość - zarządzanie wieloma zadaniami w
SYSTEMY OPERACYJNE WYKLAD 6 - procesy
Wrocław 2007 SYSTEMY OPERACYJNE WYKLAD 6 - procesy Paweł Skrobanek C-3, pok. 323 e-mail: pawel.skrobanek@pwr.wroc.pl www.equus.wroc.pl/studia.html 1 Zasoby: PROCES wykonujący się program ; instancja programu
Zasady programowania Dokumentacja
Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika
Mariusz Rudnicki PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.4
Mariusz Rudnicki mariusz.rudnicki@eti.pg.gda.pl PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO CZ.4 Synchronizacja wątków Omawiane zagadnienia Czym jest synchronizacja wątków? W jakim celu stosuje się mechanizmy
Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie
Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1 Pętle Pętla jest konstrukcją sterującą stosowaną w celu wielokrotnego wykonania tego samego zestawu instrukcji jednokrotne
Aplikacje w Javie- wykład 11 Wątki-podstawy
1 Aplikacje w Javie- wykład 11 Wątki-podstawy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/ http://docs.oracle.com/javase/9/docs/
Implementacje zgodne z tym standardem są nazywane wątkami POSIX lub Pthreads.
pthreads (POSIX) implementacji równoległości poprzez wątki w architekturach wieloprocesorowych z pamięcią współdzieloną przenośność problem programistyczny, gdy dostawcy sprzętu wdrażali własne wersje
Stałe i zmienne znakowe. Stała znakowa: znak
Stałe i zmienne znakowe. Stała znakowa: znak Na przykład: a, 1, 0 c Każdy znak jest reprezentowany w pamięci przez swój kod. Kody alfanumerycznych znaków ASCII to liczby z przedziału [32, 127]. Liczby
Programowanie współbieżne Wykład 9 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska
Programowanie współbieżne Wykład 9 Synchronizacja dostępu do współdzielonych zasobów Iwona Kochańska Sekcja krytyczna Instrukcje wykonywane na zmiennych współdzielonych tworzą sekcję krytyczną. Instrukcje
Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()
Paweł Gmys PHP strona 1 Lekcja 10 Uprawnienia Aby skrypt PHP mógł odwołać się do pliku, musi mieć odpowiednie uprawnienia. Szczegóły są zależne od serwera. Najczęściej chyba skrypt ma uprawnienia takie,
Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.
Laboratorium 7 Wstęp Jednym z podstawowych własności Javy jest wielowątkowość. Wiąże się to z możliwością współbieżnego wykonywania różnych operacji w ramach pojedynczej wirtualnej maszyny Javy (JVM).
Wielowątkowy serwer TCP
Wielowątkowy serwer TCP Wątek współbieżne działanie współdzielenie danych wykonywanie tego samego programu tańsze tworzenie w porównaniu do fork() join(), a detach() pthread - interesujące fragmenty pthread_create(),
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO
PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO LABORATORIUM Temat: THREADS SYNCHRONIZATION METHODS Mariusz Rudnicki 2016 1. Wstęp W systemach wielowątkowych wspólne zasoby procesu takie, jak: pamięć: kod programu;
Język C++ zajęcia nr 2
Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator
Programowanie współbieżne Wykład 2. Iwona Kochańska
Programowanie współbieżne Wykład 2 Iwona Kochańska Miary skalowalności algorytmu równoległego Przyspieszenie Stały rozmiar danych N T(1) - czas obliczeń dla najlepszego algorytmu sekwencyjnego T(p) - czas
SYSTEMY OPERACYJNE WYKLAD 6 - wątki
Wrocław 2007 SYSTEMY OPERACYJNE WYKLAD 6 - wątki Paweł Skrobanek C-3, pok. 323 e-mail: pawel.skrobanek@pwr.wroc.pl www.equus.wroc.pl/studia.html 1 PLAN: 1. Wątki 2. Planowanie przydziału procesora (szeregowanie
Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017
Wykład 8 10 maj 2017 Współbieżność Watki w JAVA-ie Współbieżność może być realizowana na poziomie systemu operacyjnego (procesy) lub na poziomie aplikacji (watki). W JAVA-ie powszechnie stosuje się watki.
Jędrzej Ułasiewicz Programownie aplikacji współbieżnych str. 1. Wątki
Jędrzej Ułasiewicz Programownie aplikacji współbieżnych str. 1 1 Informacje wstępne...2 2 Rodzaje wątków...7 poziomu jądra...7 poziomu użytkownika...8 Rozwiązania mieszane...8 3 Biblioteka pthreads...12
Biblioteka standardowa - operacje wejścia/wyjścia
Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline
I.Wojnicki, Tech.Inter.
Igor Wojnicki (AGH, KA) 13 maja 2012 1 / 26 Hypertext Preprocessor Igor Wojnicki Katedra Automatyki Akademia Górniczo-Hutnicza w Krakowie 13 maja 2012 $Id: php1.tex,v 1.1 2011/11/19 19:14:25 wojnicki Exp
1.1 Definicja procesu
1 Procesy pojęcia podstawowe 1 1.1 Definicja procesu Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Porządek dostępu do zasobu: procesory obszary pamięci cykle procesora pliki urządzenia we/wy
ZAKLESZCZENIA w SO brak środków zapobiegania zakleszczeniom Zamówienia na zasoby => przydział dowolnego egzemplarza danego typu Zasoby w systemie typy; identyczne egzemplarze procesory obszary pamięci
Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1
Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem
Podstawy programowania komputerów
Podstawy programowania komputerów Wykład 14: Programowanie współbieżne w C Definicja programowania współbieżnego Programowanie współbieżne jest tworzeniem programów, których wykonanie powoduje uruchomienie
Wstęp do programowania
Wstęp do programowania Przemysław Gawroński D-10, p. 234 Wykład 1 8 października 2018 (Wykład 1) Wstęp do programowania 8 października 2018 1 / 12 Outline 1 Literatura 2 Programowanie? 3 Hello World (Wykład
Podstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop
Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop. 2016 Spis treści Wprowadzenie 11 Adresaci książki 12 Co wyróżnia tę książkę na
1. Timery i zdarzenia
Sygnały 1 1. Timery i zdarzenia 1.1 Funkcje i programowanie timerów Jedną z najczęściej spotykanych funkcji systemu jest generowanie zdarzeń które w ustalonym czasie uruchomić mają określone akcje systemu.
1. Utwórz blok pamięci współdzielonej korzystając z poniższego kodu:
6 Pamięć współdzielona 6.1 Dostęp do pamięci współdzielonej 1. Utwórz blok pamięci współdzielonej korzystając z poniższego kodu: #include #include #include #include
do instrukcja while(wyrażenie);
emat zajęć: Operatory i instrukcje w języku C - 3 Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (instrukcja cyklu: while) Język C oferuje kilka instrukcji cyklu (pętli). Oprócz wprowadzonej wcześniej
Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI
Projektowanie oprogramowania systemów PROCESY I ZARZĄDZANIE PROCESAMI plan Cechy, właściwości procesów Multitasking Scheduling Fork czym jest proces? Działającą instancją programu Program jest kolekcją
Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor
Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011
Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Uruchomienie programu powoduje stworzenie nowego procesu przez system operacyjny. Proces wykonywany program wraz
SYSTEMY CZASU RZECZYWISTEGO - VxWorks
WZAJEMNE WYKLUCZANIE Wiele metod. Np. wyłączanie przerwań: funkcja() //... Int blokada = intlock(); // Obszar krytyczny, któremu nie możemy przerwać intunlock(blokada); wyłączanie wywłaszczania: funkcja()
Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie
znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:
Skrypty powłoki Skrypty są zwykłymi plikami tekstowymi, w których są zapisane polecenia zrozumiałe dla powłoki. Zadaniem powłoki jest przetłumaczenie ich na polecenia systemu. Aby przygotować skrypt, należy:
WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński
WYKŁAD 9 Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c Tomasz Zieliński /* Przyklad 4.1 - SORTOWANIE TABLIC - metoda najprostsza */ #include #define ROZMIAR 11 void
Działanie systemu operacyjnego
Budowa systemu komputerowego Działanie systemu operacyjnego Jednostka centralna dysku Szyna systemowa (magistrala danych) drukarki pamięci operacyjnej I NIC sieci Pamięć operacyjna Przerwania Przerwania
2 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania
5. Model komunikujących się procesów, komunikaty
Jędrzej Ułasiewicz str. 1 5. Model komunikujących się procesów, komunikaty Obecnie stosuje się następujące modele przetwarzania: Model procesów i komunikatów Model procesów komunikujących się poprzez pamięć
ZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
Argumenty wywołania programu, operacje na plikach
Temat zajęć: Argumenty wywołania programu, operacje na plikach Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (Zmienne statyczne) W języku C można decydować o sposobie przechowywania zmiennych. Decydują
Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Obsługa plików Kraków 2013 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim będziemy mogli