2021-06 [seminár] vlákna
Preber si túto prednášku so svojou AI
Skopíruj pripravený podklad a vlož ho do ChatGPT, Claude alebo inej AI — bude ťa učiť alebo skúšať len z tejto prednášky.
Zhrnutie prednášky
Seminár sa venuje práci s vláknami mimo XV6, konkrétne používaniu POSIX vlákien (pthreads) na paralelnú prácu s hešovacou tabuľkou. Na príklade programu s hešovacou tabuľkou implementovanou ako pole zreťazených zoznamov sa demonštruje, že paralelné vkladanie záznamov viacerými vláknami spôsobuje stratu konzistencie dát, pretože dve vlákna môžu súčasne modifikovať začiatok toho istého zoznamu (race condition). Ako riešenie sa zavádza mutex (pthread_mutex_t) s operáciami init, lock a unlock, ktorým sa zabezpečí vzájomné vylúčenie pri prístupe k zdieľanej štruktúre. Prakticky sa ukazuje, kam presne v kóde funkcií put a get umiestniť zamknutie a odomknutie zámku, vrátane rizika deadlocku pri nesprávnom návrhu. Diskutuje sa aj kompromis medzi bezpečnosťou (zamykanie len pri zápise, keďže sa nemaže) a výkonom, keďže zámky výrazne spomaľujú vykonávanie.
- - Cvičenie 6 obsahuje tri úlohy, prvá (užívateľské vlákna v XV6) je na samoštúdium
- - Hlavná úloha: paralelný prístup viacerých vlákien k hešovacej tabuľke pomocou knižnice pthreads
- - Hešovacia tabuľka je implementovaná ako pole baketov so zreťazenými zoznamami záznamov
- - Bez synchronizácie vzniká race condition pri súčasnom vkladaní (funkcia insert) – strata záznamov
- - Riešením je mutex (pthread_mutex_t) s operáciami init, lock a unlock na zabezpečenie vzájomného vylúčenia
- - Dôležité je správne umiestnenie zamknutia/odomknutia v kóde a riziko deadlocku pri chybnom návrhu
- - Zamykanie stačí len pri operácii put (zápis), keďže sa nemaže, čím sa šetrí výkon, no zámky celkovo spomaľujú beh programu
Zhrnutie pripravené s pomocou AI z prepisu videa.
nechodím na prednášky