Programowanie współbieżne Wykład 6. Iwona Kochaoska

Podobne dokumenty
W dowolnym momencie można zmienić typ wskaźnika.

Lab 9 Podstawy Programowania

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania skrót z wykładów:

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Języki i techniki programowania Ćwiczenia 2

Referencje do zmiennych i obiektów

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

Język C++ zajęcia nr 2

Podstawy programowania w języku C++

Wykład 3 Składnia języka C# (cz. 2)

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Zmienne, stałe i operatory

Wartości domyślne, przeciażenia funkcji

Programowanie współbieżne Wykład 7. Iwona Kochaoska

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Wartości domyślne, przeciażenia funkcji

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania w języku C++

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Wykład 5: Klasy cz. 3

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Podstawy programowania 1

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Tablice, funkcje - wprowadzenie

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

Czym jest stos i sterta?

Wykład 1: Wskaźniki i zmienne dynamiczne

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Język C++ Różnice między C a C++

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Wstęp do informatyki- wykład 11 Funkcje

Wskaźniki. Informatyka

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Wstęp do informatyki- wykład 9 Funkcje

Programowanie obiektowe w C++ Wykład 1

Wstęp do programowania

Wskaźniki. Programowanie Proceduralne 1

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

MATERIAŁY DO ZAJĘĆ II

Nowoczesny C++ Rafał Wasilewski 1

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

część 8 wskaźniki - podstawy Jarosław Gramacki Instytut Informatyki i Elektroniki Podstawowe pojęcia

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

Programowanie 2. Język C++. Wykład 3.

Wskaźniki w C. Anna Gogolińska

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Tablice, funkcje, wskaźniki - wprowadzenie

Podstawy programowania w języku C++

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania obiektowego

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

TEMAT : KLASY DZIEDZICZENIE

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wykład 8: klasy cz. 4

Podstawy programowania w języku C++

Przekazywanie argumentów wskaźniki

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

PODSTAW PROGRAMOWANIA WYKŁAD 6 WSKAŹNIKI

Programowanie Komputerów

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Wprowadzenie do szablonów klas

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Stałe i zmienne znakowe. Stała znakowa: znak

Szablony funkcji i szablony klas

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Konstruktor kopiujacy

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

ZMIENNE. Podstawy PHP

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

2 Przygotował: mgr inż. Maciej Lasota

Wprowadzenie do szablonów szablony funkcji

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

Tablice deklaracja, reprezentacja wewnętrzna

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Transkrypt:

Programowanie współbieżne Wykład 6 Iwona Kochaoska

Przekazywanie parametrów Do funkcji obsługi wątku można przekazad dowolną liczbę parametrów

Przekazywanie parametrów Jest to przekazywanie parametrów przez wartośd

Przekazywanie parametrów przez referencję Użycie & to za mało! Kiedy tworzony jest nowy wątek, parametry przekazane do funkcji tego wątku są KOPIOWANE na stos nowego wątku. Adresy kopii parametrów są inne, niż adresy parametrów przekazanych do wątku!

Przekazywanie parametrów przez referencję Metoda ref( )!

Kilka słów o wskaźniku i referencji.. Jak działa wskaźnik?

Kilka słów o wskaźniku i referencji.. Jak działa referencja?

Modyfikator const const w C++ to jeden z najczęstszych modyfikatorów. Historzycznie służył (i służy) do definiowania stałych. const int C = 100; Wskaźniki na stałe Stały wskaźnik Referencja do stałej W programowaniu wielowątkowym const zapewnia bezpieczeostwo!

Modyfikator const wskaźnik na stałą const int C = 100; int* p = &C; // NIE ZADZIAŁA! p jest wskaźnikiem na liczbę, która jest stała., ale typ wskaźnika p nie zawiera takiej informacji! const int C = 100; lub const int C = 100; int const* p = &C; // ZADZIAŁA! const int* p = &C; // ZADZIAŁA! To, na co wskazuje wskaźnik p, nie może byd modyfikowane. Elementem wskazywanym nie musi byd stała: int C = 100; const int* p = &C; // ZADZIAŁA! Można zmieniad elementy na które wskazuje p: const int* p = &x; p = &C; // wskaźnik na zmienną x // wskaźnik na zmienną C

Modyfikator const stały wskaźnik int C = 100; int* const p = &C; Kiedy const pojawia się po gwiazdce, to mamy stały wskaźnik. Czyli możemy modyfikowad element, na który wskazuje p, ale nie możemy zmienid samego p - ten wskaźnik będzie już zawsze wskazywał na ten sam adres w pamięci. Nie możemy: p = &x; //próba zmiany adresu zmiennej, na który wskazuje p Ale możemy: *p = 8; //próba zmiany wartości zmiennej, na którą wskazuje p Staly wskaźnik do stałej: const int* const p = &C; //niczego nie można zmienid!

Referencja do stałej: Referencje do stałych const int& r = INFINITY; lub int const& r = INFINITY; r = 7; // NIE ZADZIAŁA! Czy możemy utworzyd stałą referencję? int x = 7; int& const p = x; NIE! Kompilator może skompilowad taki kod, ale nie jest on zgodny ze sztuką. Referencja z definicji jest stała

Przekazywanie parametrów z modyfikatorem const do podprogramów void f1(int* const a) - stały wskaźnik. Wewnątrz podprogramu f1 można zawoład: *a = 8; // zmiana wartości komórki pamięci, na którą wskazuje a Nie można: a = new int(5);. //zmiana adresu, na który wskazuje a void f2(const int* a) - wskaźnik na stałą. Wewnątrz podprogramu f2 można zawoład: a = new int(5);. Nie można: *a = 8; void f3(const int* const a) - stały wskaźnik na stałą. Nie można: *a = 8; a = new int(5); void f4(const int& a) - stała referencja. Ni e można: a = 8;. Bez modyfikatora const nie można wywoład f4 z parametrem podanym jako wartośd: f4(123);

Jeszcze o przekazywaniu parametrów Do funkcji obsługi wątku przekazywany jest łaocuch znaków: Funkcja obsługi wątku otrzymuje referencję do std::string Jednak łaocuch znaków został przekazany do tej funkcji jako const char*! ( input.dat ). Konwersja na std::string zachodzi tylko w funkcji nowego wątku! To generuje problemy!

Jeszcze o przekazywaniu parametrów Problem Zmienna buffer przekazywana jest do nowego wątku jako bufor znakowy char buffer[15] (lub char* buffer).

Jeszcze o przekazywaniu parametrów Problem c.d. Istnieje pewne prawdpodobieostwo, że funkcja thread_function zakonczy swoje działanie, zanim char* zostanie zmienione lokalnie na std::string! Wskaźnik nie wskazuje na poprawny adres zmiennej i działanie wątku staje się nieprzewidywalne! Rozwiązanie: Bezpośrednie rzutowanie na std::string, zanim parametr zostanie przekazany do wątku: std::thread t1(thread_function, std::string(buffer));

Literatura http://www.acodersjourney.com/2017/08/top-20-cplusplusmultithreading-mistakes/ http://cpp0x.pl/kursy/kurs-c++/poziom-x/wyrazenia-lambda- C++11/423 http://thispointer.com/c11-multithreading-part-2-joining-anddetaching-threads/ http://thispointer.com/c11-multithreading-part-3-carefullypass-arguments-to-threads/