Spis treści
Programowanie współbieżne
Nie bywałem na wykładzie z tego, jednak student po tym przedmiocie powinien mieć wiedzę co najmniej o:
- blokada wirująca (spinlock, „mplock”)
- mutex (wzajemne wykluczanie)
- semafor (2 operacje atomowe)
- monitor (3 elementy)
- problem filozofów
- problem czytelników-pisarzy (np. w kontekście baz danych)
- problem producent-konsument
- spotkania (randevous)
- algorytm dekera
- algorytm bankiera
- algorytm petersona
Spotkania (randevous)
Dobry tutorial opisujący spotkania w Adzie
- dozory
- wejścia
- spotkanie
- pisanie spoolerów, serwerów itp
Słowa kluczowe w Adzie od spotkań:
- select
- accept
- delay
- terminate
- task
- task body
Spotkania są mechanizmem pierwotnym w:
- Adzie
- OCaml'u, więc także np. F#
- OpenMP API
W Adzie to idzie mniej więcej tak:
select when costam => accept Wejscie(costam...) do ... end Wejscie; or when costam => accept Wejscie(costam...) do ... end Wejscie; or terminate; end select; loop accept Wejscie(costam...) do ... end Wejscie; accept Wejscie2(costam...) do ... end Wejscie2; end loop;
Funkcje WinAPI
Semafory (windows.h):
- CreateSemaphore( SECURITY_ATTRIBUTES*,initVal,maxVal,name)
- ReleaseSemaphore(sem,incVal,oldVal*)
- WaitForSingleObject(sem, msWaitTime)
- CloseHandle(sem)
Wątki (windows.h):
HANDLE thr = CreateThread(SECURITY_ATTRIBUTES*,stackSize, start,arg,flaga,identyfikator);
- ResumeThread(handle)
- SuspendThread(handle)
- SetThreadPriority(handle, prio)
- GetThreadPriority(handle)
- ExitThread(kod_wyjscia)
- TerminateThread(handle,kod_wyjscia)
- CloseHandle(handle);
Widelec jako semafor w Javie ;-)
/* * Widelec jako niepodzielny zasób - semafor * Copyright (C) 2005 Robert N * */ package filozofowie; public class Widelec { private boolean wolny = false; public Widelec() { } public boolean isWolny() { return wolny; } /** * Operacja semaforowa P, atomowa */ synchronized public void zajmij() { try { while (wolny == false) { wait(); } } catch (InterruptedException e) { } wolny = false; } /** * Operacja semaforowa V, atomowa */ synchronized public void zwolnij() { if (wolny == true) { throw new WidelecException( "Proba zwolnienia niezajętego widelca"); } wolny = true; notifyAll(); } }
Pozostałe rzeczy z wykładu
- Programowanie rozproszone
to miało stanowić prawie połowę wykładu, ale nie było to zrealizowane prawie w ogóle - Programowanie współbieżne w języku occam (nie ma tu literówki)
- Algorytm Dijkstry-Sholtena
- Język Linda
- o języku Ada
- Pojęcie markera (tokena)
- RPC (różne mechanizmy, m.in. jakiś Javowy)
Laboratorium
- Semafory
obiekt zawierający atomowe operacje Czekaj(), Sygnalizuj(). Dodatnia wartość to podniesiony semafor (można „jechać”) - Monitory
Zapobiegają rozsianiu operacji semaforowych po różnych cześciach, modułach programów. Dają interfejs dostępu do posiadanych przez nie usług - Zadanie problemowe (5 filozofów, producent-konsument, …)