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íkpop
- Odebere prvek z vrcholu zásobníkuisEmpty
- 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.