Różnice między wybraną wersją a wersją aktualną.
| Nowa wersja | Poprzednia wersja | ||
|
bio-psiec:threads [2026/01/08 00:01] jkonczak utworzono |
bio-psiec:threads [2026/01/18 13:02] (aktualna) jkonczak |
||
|---|---|---|---|
| Linia 184: | Linia 184: | ||
| void funkcja() { | void funkcja() { | ||
| - | for (int i = 0; i < 3; ++i) { | + | for (int i = 0; i < 5; ++i) { |
| std::cout << "drugi wątek, iteracja " << i << std::endl; | std::cout << "drugi wątek, iteracja " << i << std::endl; | ||
| usleep(100000); | usleep(100000); | ||
| Linia 208: | Linia 208: | ||
| void funkcja() { | void funkcja() { | ||
| - | for (int i = 0; i < 3; ++i) { | + | for (int i = 0; i < 5; ++i) { |
| std::cout << "drugi wątek, iteracja " << i << std::endl; | std::cout << "drugi wątek, iteracja " << i << std::endl; | ||
| usleep(100000); | usleep(100000); | ||
| Linia 251: | Linia 251: | ||
| </code> | </code> | ||
| - | Dowolny wątek może stworzyć nowy wątek; poniżej przykład kodu tworzący 17 wątków: | + | Dowolny wątek może stworzyć nowy wątek; poniżej przykład kodu tworzący wiele wątków: |
| <code c++> | <code c++> | ||
| #include <iostream> | #include <iostream> | ||
| Linia 359: | Linia 359: | ||
| </code> | </code> | ||
| - | Standard POSIX określa czy i jak można ją wykonywać funkcje współbieżnie z | + | Standard POSIX określa czy i jak można wykonywać funkcje współbieżnie z |
| innymi. Dla gniazd TCP można współbieżne wywoływać operacje wejścia/wyjścia | innymi. Dla gniazd TCP można współbieżne wywoływać operacje wejścia/wyjścia | ||
| - | na tym samym gnieździe i są one atomowe, tzn. wywołanie współbieżnie dwóch | + | na tym samym gnieździe. O ile dla niektórych rodzajów plików standard POSIX |
| - | ''send'' (lub dwóch ''recv'') wykona najpierw jedno z tych wywołań, potem | + | określa że operacje wejścia/wyjścia są atomowe (tzn. wywołanie współbieżnie |
| - | drugie. | + | dwóch ''write'' lub dwóch ''read'' wykona najpierw jedno z tych wywołań, |
| + | potem drugie), o tyle dla gniazd nie ma takiej gwarancji. | ||
| \\ | \\ | ||
| - | Przy czym trzeba pamiętać, że niektóre operacje mogą wysłać czy odczytać mniej | + | Trzeba pamiętać, że często operacje wejścia/wyjścia mogą odczytać czy wysłać |
| - | danych niż żądał programista, więc zwykle i tak synchronizacja (przynajmniej | + | mniej danych niż żądał programista, więc zwykle i tak synchronizacja |
| - | odbierania) na tym samym gnieździe jest konieczna. | + | (przynajmniej odbierania) na tym samym gnieździe jest konieczna. |
| \\ | \\ | ||
| Zamknięcie połączenia TCP z jednego wątku przerywa operacje czekające na | Zamknięcie połączenia TCP z jednego wątku przerywa operacje czekające na | ||
| Linia 391: | Linia 392: | ||
| wszystkim połączonym klientom. Zauważ że serwer musi jednocześnie czekać na | wszystkim połączonym klientom. Zauważ że serwer musi jednocześnie czekać na | ||
| nowych klientów i jednocześnie odbierać wiadomości od każdego z już połączonych. | nowych klientów i jednocześnie odbierać wiadomości od każdego z już połączonych. | ||
| + | \\ | ||
| + | Załóż że każde wysłanie wiadomości jest wykonywane bez blokowania. | ||