Laboratoria merge requestshttps://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests2022-12-11T18:46:16Zhttps://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/13Refresh przyklady11-signals.2022-12-11T18:46:16ZMarcin WrochnaRefresh przyklady11-signals.https://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/12Odświeżenie przykładów z pthreads.2022-12-11T18:04:13ZMarcin WrochnaOdświeżenie przykładów z pthreads.https://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/11Odświeżone przykłady08-pipes, ułatwienia do debugowania małego zadania.2022-11-26T18:21:39ZMarcin WrochnaOdświeżone przykłady08-pipes, ułatwienia do debugowania małego zadania.https://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/10Odświeżenie przyklady07-fork-exec-wait2022-11-21T23:40:54ZMarcin WrochnaOdświeżenie przyklady07-fork-exec-wait* W err.h dodane makro ASSERT_SYS_OK, żeby zamiast pisać długie linijki postaci
```c
if (close(pipe_dsc[0]) == -1) syserr("Error in close(pipe_dsc[0])\n");
```
wystarczało
```c
ASSERT_SYS_OK(close(pipe_dsc[0]));
...* W err.h dodane makro ASSERT_SYS_OK, żeby zamiast pisać długie linijki postaci
```c
if (close(pipe_dsc[0]) == -1) syserr("Error in close(pipe_dsc[0])\n");
```
wystarczało
```c
ASSERT_SYS_OK(close(pipe_dsc[0]));
```
(na kolejnych zajęciach, z pipe, co druga linijka będzie tej postaci).
* Zmiana stylu wołania forka, z użycia `switch` na
```c
pid_t pid;
ASSERT_SYS_OK(pid = fork());
if (!pid) {
// child
} else {
// parent
}
```
Wydaje mi się, że szczególnie w tree.c to jest czytelniejsze. A przy okazji każde wywołanie systemowe jest tak samo otoczone `ASSERT_SYS_OK`, nie potrzeba `syserr` (również w późniejszych modułach).
* Parę innych drobnych zmian np. w wypisywanych stringach.
* Uproszczony CMakeLists.txt, z ustalonymi wersjami: C11 (i C++17)
* Wszystko sformatowane z clang-tidy.
* Dodana konfiguracja lintera clang-format (żeby nie wyskakiwały niepotrzebne warningi przy domyślnych ustawieniach niektórych IDE, za to pokazywały się bardziej przydatne).https://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/9Obecne wersje przykładów o C z Moodle.2022-11-21T23:40:38ZMarcin WrochnaObecne wersje przykładów o C z Moodle.https://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/8Nowa wersja modułu o sygnałach2022-01-17T15:02:38ZMarcin WrochnaNowa wersja modułu o sygnałachMożna zobaczyć na [Moodle'u](https://moodle.mimuw.edu.pl/mod/page/view.php?id=62645).Można zobaczyć na [Moodle'u](https://moodle.mimuw.edu.pl/mod/page/view.php?id=62645).https://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/7Fix issue #3: przyklady05.Utils.awaitAll dwa razy czyta listę.2021-12-05T17:38:00ZMarcin WrochnaFix issue #3: przyklady05.Utils.awaitAll dwa razy czyta listę.https://gitlab.mimuw.edu.pl/pw/laboratoria/-/issues/3https://gitlab.mimuw.edu.pl/pw/laboratoria/-/issues/3https://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/6Lab 62021-11-22T18:58:01ZAndrzej GłuszakLab 6https://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/5Zmiany w labie 52021-11-22T18:57:47ZAndrzej GłuszakZmiany w labie 5Dodałem nowy przykład, być może najważniejszy - bo pokazuje, dlaczego w praktyce chcemy używać CompletableFuture'ów zamiast zwykłych Future'ów. Poprawiłem też różne drobnostki i dodałem link do tutoriala, z którego studenci i tak korzyst...Dodałem nowy przykład, być może najważniejszy - bo pokazuje, dlaczego w praktyce chcemy używać CompletableFuture'ów zamiast zwykłych Future'ów. Poprawiłem też różne drobnostki i dodałem link do tutoriala, z którego studenci i tak korzystali.https://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/4Zmiany w labie 52021-11-14T10:11:30ZAndrzej GłuszakZmiany w labie 5Dodałem nowy przykład, być może najważniejszy - bo pokazuje, dlaczego w praktyce chcemy używać CompletableFuture'ów zamiast zwykłych Future'ów. Poprawiłem też różne drobnostki i dodałem link do tutoriala, z którego studenci i tak korzyst...Dodałem nowy przykład, być może najważniejszy - bo pokazuje, dlaczego w praktyce chcemy używać CompletableFuture'ów zamiast zwykłych Future'ów. Poprawiłem też różne drobnostki i dodałem link do tutoriala, z którego studenci i tak korzystali.https://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/3Lab 52021-11-13T22:49:06ZAndrzej GłuszakLab 5Chciałbym całkowicie zastąpić scenariusz o Future'ach i ForkJoin nową wersją, skupiającą się głównie na CompletableFuture'ach. To API jest dużo nowsze i - odnoszę wrażenie - znacznie popularniejsze obecnie od starego, a poza tym można na...Chciałbym całkowicie zastąpić scenariusz o Future'ach i ForkJoin nową wersją, skupiającą się głównie na CompletableFuture'ach. To API jest dużo nowsze i - odnoszę wrażenie - znacznie popularniejsze obecnie od starego, a poza tym można na jego przykładzie wytłumaczyć popularny obecnie paradygmat programowania asynchronicznego:
https://docs.scala-lang.org/overviews/core/futures.html
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
https://docs.swift.org/swift-book/LanguageGuide/Concurrency.html
https://rust-lang.github.io/async-book/01_getting_started/04_async_await_primer.html
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/await
Zadanie punktowane to byłoby przepisanie przykładu BankDatabase na wersję asynchroniczną, korzystającą z CompletableFuture.
W treści scenariusza (która jeszcze nadal powstaje) potrzebujemy wytłumaczyć, czym różnią się od siebie metody thenApply (map w językach funkcyjnych) i thenCompose (flatMap), a także jak się do nich mają wersje async.
Obsługą wyjątków raczej bym się nie przejmował.
Jako przykład dołączyłem też uproszczoną wersję klasy Future, która fajnie pokazuje zastosowanie kolejek synchronicznych z poprzednich zajęć.https://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/2Lab 42021-10-25T20:44:34ZAndrzej GłuszakLab 4(Jeszcze nie skończone - nie poprawiłem samego scenariusza, potrzeba też bardziej klarownie sformułować polecenie)
Dla zademonstrowania sensu zmiennych atomowych dodałem program ParallelSumAtomic. Można go zestawić z programem z pierwsz...(Jeszcze nie skończone - nie poprawiłem samego scenariusza, potrzeba też bardziej klarownie sformułować polecenie)
Dla zademonstrowania sensu zmiennych atomowych dodałem program ParallelSumAtomic. Można go zestawić z programem z pierwszych zajęć, który nie działał.
Program KolejkaJedynek podmieniłem na ProducersConsumersSynchronized. Można go porównać z programem z zajęć poprzednich.
Usunąłem programy przykładowe WspolnaLista i Liczniki. Zamiast tego dodałem duży program przykładowy Bank, który ma zademonstrować, czym różnią się od siebie gwarancje dawane przez kolekcje synchronizowane, współbieżne i zwykłe, a także zmienne atomowe i nieatomowe. Powinno być widać, że do prawidłowego działania banku potrzebujemy zarówno zmiennych atomowych, jak i kolekcji synchronizowanej - przy czym kolekcja współbieżna będzie szybsza.
Jako zadanie niepunktowane chcę dać dołożenie do banku nowego typu konta opierającego się o https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/LongAdder.html, co powinno jeszcze bardziej przyspieszyć działanie.https://gitlab.mimuw.edu.pl/pw/laboratoria/-/merge_requests/1Lab 32021-10-25T17:38:38ZAndrzej GłuszakLab 3