scala - What is the purpose of an empty loop in this volatile var example? -
code:
class page(val txt: string, var position: int) val rand = new random() object volatile { val pages = for(i <- 1 5) yield new page("na" * rand.nextint(1000) + " batman!", -1) @volatile var found = false (p <- pages) yield thread { var = 0 while (i < p.txt.length && !found) if (p.txt(i) == '!') { p.position = found = true } else += 1 while(!found) {} log(s"results: ${pages.map(_.position)}") } } what purpose of empty loop while(!found) {}?
the first loop: while (i < p.txt.length && !found) has 2 conditions stopping: when search space exhausted, or when match found. note found variable used in multiple threads: thread {...} presumably spawns new thread.
so there several possibilities how threads' loops can play out:
- the thread finds
'!', setsfound. first loop breaks, second doesn't execute. - another thread sets
found. first loop breaks, second doesn't execute. - all characters searched. first loop breaks, second executes until thread finds
'!'.
the third 1 1 forgot. consequence results logged once loops finished.
granted, can't tell why code looks does: each thread, separately prints results pages, i.e. if there n pages, n^2 results logged. also, threads access shared object without synchronization. if goal find 1 exclamation mark, code fails. anyway, these seem separate issues.
Comments
Post a Comment