In deze oefening implementeren we zelf MVar
s met behulp van software transactional memory. Het datatype van onze software transactional MVar (STMMVAR) is simpelweg een TVar
die een Maybe a
waarde bevat. Wanneer de STMMVAR onbeschreven is, bevat hij een Nothing
.
Schrijven naar de STMMVAR zal de waarde van de TVar
dan aanpassen om de nieuwe waarde te bevatten, tenzij al een Just
waarde in de TVar
zat. In dat geval blijven we blokkeren tot deze in een Nothing
veranderd.
Het uitlezen van een STMMVAR gebeurd op gelijkaardige wijze: als de STMMVAR een waarde bevat, geven we deze terug en wordt een Nothing
de nieuwe inhoud van de TVar
. Zolang de TVar
leeg is, herstarten we de transactie.
Opmerking: Het testen van de volgorde en correctheid van IO operaties is nog niet ingebouwd in de huidige versie van de Judge. Test daarom jouw code ook lokaal grondig.