4. cvičení - Semafory

Objektově orientované programování v Pythonu

    
    class Person:

        kind = "Homo sapiens" # Proměnná sdílená všemi instancemi třídy Person

        # Konstruktor který vytvoří osobu se jménem a věkem
        def __init__(self, name, age):
            # Proměnné unikátní pro každou instanci
            self.name = name
            self.age = age

        def introduce_yourself(self):
            print(self._introduction_string())

        # Python oficiálně nepodporuje private metody.
        # Lze se držet konvence, že metody jejichž název začíná _
        # nejsou určené k volání uživatelem dané třídy.

        def _introduction_string(self) -> str:
            return "Ahoj, jmenuji se {} a je mi {} let.".format(self.name, self.age)


    # Vytvoření instance třídy
    p = Person("Tomáš Marný", 23)

    # Volání metody
    p.introduce_yourself()

    # Změna atributů třídy
    p.age = 25
    

Úkoly

(Bodovaný) Naprogramujte thread-safe zásobník. Přístup k zásobníku synchronizujte pomocí semaforů. Se zásobníkem můžeme provádět následující operace:

  • push - Vloží prvek na zásobník
  • pop - Odebere prvek z vrcholu zásobníku
  • isEmpty - Vrací true pokud je zásobník prázdný

Pokud vlákno zavolá pop na prázdný zásobník tak nemusí čekat až tam jíné vlákno vloží prvek ale hned vrati None.

Naprogramujte atomický broadcast. Máme jednoho producenta a n konzumentů a sdílený buffer o velikosti 1. Producent vkládá do bufferu hodnoty a konzumenti je čtou. Každá hodnota ale musí být přečtena všemi konzumenty před tím než může producent vložit další hodnotu do bufferu.