On Wednesday 29 March 2006 13:35, John Meacham wrote: > I am not sure what the MVar guarentee means, if it is blocked on an > MVar, then it becomes runnable when the MVar is filled, so the > runnable rule seems to take care of it.
Unfortunately not. Suppose threads A, B, and C compete for taking the same MVar. Now, without the MVar related fairness condition, threads A and B could be scheduled so that both alternately get the MVar but thread C still can't make any progess since it never gets the MVar. Note that this problem is related to so called priority inversion in priority scheduled systems. Priority inversion happens when a high priority thread waits for a resource held by a low priority process, but the latter can't make progress because it gets crowded out by a medium priority thread. In this case the medium priority thread effectively runs with a priority higher than the high priority thread, contrary to what the programmer has specified. The standard solution is to adopt a priority inheritance protocol, that is, temporarily raise the priority of any process that has claimed a resource to the maximum priority of all threads waiting for this resource. Ben -- There are three kinds of programmers: those who make off by one errors, and those who don't. _______________________________________________ Haskell-prime mailing list [email protected] http://haskell.org/mailman/listinfo/haskell-prime
