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

  1. Semafory
    obiekt zawierający atomowe operacje Czekaj(), Sygnalizuj(). Dodatnia wartość to podniesiony semafor (można „jechać”)
  2. Monitory
    Zapobiegają rozsianiu operacji semaforowych po różnych cześciach, modułach programów. Dają interfejs dostępu do posiadanych przez nie usług
  3. Zadanie problemowe (5 filozofów, producent-konsument, …)
przedmioty/programowanie_wspolbiezne.txt · ostatnio zmienione: 2007/01/18 16:20 (edycja zewnętrzna)
Recent changes RSS feed Creative Commons License Donate Minima Template by Wikidesign Driven by DokuWiki