Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

przedmioty:programowanie_wspolbiezne [2007/01/18 16:20] (aktualna)
Linia 1: Linia 1:
 +====== 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) ====
 +[[http://​en.wikibooks.org/​wiki/​Ada_Programming/​Tasking|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#
 +  * [[http://​en.wikipedia.org/​wiki/​OpenMP|OpenMP]] API
 +
 +W Adzie to idzie mniej więcej tak:
 +<code ada>
 +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;
 +
 +</​code>​
 +
 +
 +===== Funkcje WinAPI =====
 +Semafory (windows.h):​
 +  * CreateSemaphore( SECURITY_ATTRIBUTES*,​initVal,​maxVal,​name)
 +  * ReleaseSemaphore(sem,​incVal,​oldVal*)
 +  * WaitForSingleObject(sem,​ msWaitTime)
 +  * CloseHandle(sem)
 +
 +
 +Wątki (windows.h):​
 +  * <​code>​HANDLE thr = CreateThread(SECURITY_ATTRIBUTES*,​stackSize,​
 +start,​arg,​flaga,​identyfikator);​
 +</​code>​
 +  * ResumeThread(handle)
 +  * SuspendThread(handle)
 +  * SetThreadPriority(handle,​ prio)
 +  * GetThreadPriority(handle)
 +  * ExitThread(kod_wyjscia)
 +  * TerminateThread(handle,​kod_wyjscia)
 +  * CloseHandle(handle);​
 +
 +===== Widelec jako semafor w Javie ;-) =====
 +
 +<code java>
 +/*
 + * 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();​
 +  }
 +}
 +</​code>​
 +
 +
 +===== 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
 +  - Spotkania\\ [[http://​en.wikibooks.org/​wiki/​Ada_Programming/​Tasking|Dobry tutorial opisujący spotkania w Adzie]]
 +  - Zadanie problemowe (5 filozofów, producent-konsument,​ ...)
Recent changes RSS feed Creative Commons License Donate Minima Template by Wikidesign Driven by DokuWiki