Zkouška 05.02.2015 - Kotal

Programování v UNIXu. Cvičení probíhá v laboratoři UNIX a poskytuje posluchačům průpravu v programování v jazyce C v prostředí UNIX.
Katami
Matfyz(ák|ačka) level I
Příspěvky: 27
Registrován: 3. 2. 2014 13:40
Typ studia: Informatika Ph.D.

Zkouška 05.02.2015 - Kotal

Příspěvek od Katami »

volně Kolega Kotal píše:Pravidla
Používat můžete cokoliv, kromě přímé komunikace s kýmkoliv (chat, mail, soused). Pokud něco zkopírujete z netu, musíte vědět co to dělá a jaké to má postranní efekty či problémy.

Zadání
Dnešní jednoduché (jako vždy) zadání je naprogramovat web_crawler (neděsit se). Cílem je udržovat aktivních num_threads vláken, které postupně berou řádky z conf_file, připojí se pomocí TCP na IP_address na port port, do socketu zapíše "GET /" a přečte odpověď až do end of stream. Po skončení posledního vlákna vypíše počet úspěšných připojení a celkový počet přečtených bytů. IP_address může být jak IPv4 tak IPv6. Žádné aktivní čekání
Usage: ./a.out -n num_threads -f conf_file

Struktura conf_file
IP_address#port
...

Hints
  • Není možné použít pthread_join, protože to čeká na konkrétní vlákno, ale nevíme které skončí dříve.
  • Při čekání na vlákno je nepřípustné použit aktivní čekání, je nutné použít nějaké synchronizační primitivum.
Pak radil že máme první práci vlákna simulovat přes sleep(rand() % x) a pak až dodělávat TCP a že nemáme zezačátku řešit načítání konfiguráku, ale uložit si to staticky do pole. Taky říkal že nebude řešit jakým "zázrakem" se nám podaří načíst ten konfigurák, že na to nebude koukat (i když mi to lehce omrknul).
Já jsem se přihlásil po tom co odcházel první kolega. Koukali jsme na to s Kotalem, on to projížděl a ptal se co znamená jaká proměnná. Po asi 5-10minutách co mi tam našel nějaké drobnosti (takové které ve vícevláknových aplikacích nastávají jednou za měsíc/rok) a chtěl abych je doladil. Mezitím šel koukat k jinému kolegovi. Po tom co jsem to doladil a znovu se přihlásil o kontrolu, se podíval jak jsem vyřešil ty drobnosti a pak na to ještě pár minut koukal a ptal se, případně říkal co by se mělo ošetřovat (např. volání pthread_create). Trochu mi přišlo že mi v tom hledal jakokoliv vadu (pak mi teda řekl že se diví že to mám krátké, měl jsem to asi na 180řádků včetně include, ale zas jsem to neměl moc strukturované). Poté co byl spokojen s mým programem se ptal na dvě otázky a oznámil výslednou známku.

Otázky, které jsem dostal/zaslechl u jiných:
  • Jaký je rozdíl mezi mutexem a semaforem?
  • Jaký je rozdíl mezi reentrantní a thread-safe funkcí?
  • Jak se chovají signály v multivláknové aplikaci?
Úspěšnost nevím jaká je. Dva kolegové předemnou to udělali a já taky, další nevím
Odpovědět

Zpět na „SWI015 Programování v Unixu“