LAB5: Nadogradnja sinkronizacijskih mehanizama


U ovoj vježbi potrebno je napraviti nekoliko dodataka:
  1. proširiti semafore i monitore pozivima: sem_trywait i pthread_mutex_trylock
  2. dodati zaključavanje radnim čekanjem: pthread_spin_init/destroy/lock/trylock/unlock
  3. dodati zaključavanje čitaj/piši: pthread_rwlock_init/destroy/rdlock/wrlock/unlock
Mehanizmi su opisan u skripti, u dodatku E. Definicija sučelja (i ponašanje) može se dobiti pomoću uputa man stranica (npr. man pthread_rwlock_init).

Napisati programe s barem dvije dretve koje demonstriraju korištenje navedena sučelja. Za svako sučelje mogu biti druge dretve.

Dodatak

Preporuka je raditi u 07/07 (Chapter_07_Threads/07_Simple_RR), barem drugi dio zadatka (pthread_spin_init/destroy/lock/trylock/unlock). Naime, u 07/06 koristi se prioritetno raspoređivanje a obzirom da će u primjeru vjerojatno sve dretve imati isti prioritet, ako se dogodi da je jedna dretva prošla spin_lock (i tamo simulira neki malo duži rad s sleep) kad druga dretva pozove spin_lock ona će zauzeti procesorsko vrijeme i nitko ju neće maknuti -- niti ona dretva koja je probuđena nakon spavanja. Zato se preporuča da se koristi 07/07 koji ima (vrlo jednostavan) raspoređivač podjelom vremena koji će omogućiti dretvi koja je zauzela ključ da nastavi kasnije i izađe iz kritična odsječka ("otključa").