concurrency guarentees clarification

I have been twiddling some with the wording of the concurrency guarentees and want to run them by the list. the rules I am thinking of adding are: * every runnable thread is guarenteed to run in a finite amount of time if a program reaches a yield-point infinitly often. * Foreign concurrent calls, handle IO, and all IO actions that directly interact with the world outside the current process all must be yield-points. (in addition to any yield-points implied by the progress guarentee) The first rule is just to rule out completely brain-dead schedulers and give a fairly useful fairness guarentee. (in fact, I think it subsumes the preemptive fairness guarentee as written, as a preemptive implementation does reach a yield-point infinitly often independently of what the program is doing) I originally thought the progress guarentee implied the second, but I realize that is somewhat UNIX-centric in that all IO must be treated as potentially blocking. however in an embedded system where for instance you write directly to the screen buffer rather than a file descriptor this might not be the case so we should probably be more clear. I would like to avoid enumerating the yield points explcitly, except perhaps as a guide saying "these library routines are examples of those in the standard library that must be yield-points according to the standard". Coming up with a rule rather than a list will make it easier for users to think about and give guidance (though of course we can't guarentee) where yield-points should be placed in any implementation provided extensions. I don't intend to imply things like all memory access in case it is in an memory mapped IO region or anything that changes CPU load because someone might be looking at your CPU usage in /proc should be yield-points, just those IO actions that "explicitly" interact with the outside world. for the correct definition of explicitly. :) John -- John Meacham - ⑆repetae.net⑆john⑈

John Meacham wrote:
* every runnable thread is guarenteed to run in a finite amount of time if a program reaches a yield-point infinitly often.
What happens if one of the thread ends up in an infinite loop that contains a yield point? "Infinitely often" is unclear (I think I know what you're trying to say, but this is because I think I know what you're trying to say overall, and not because of these words). I'd say something like "if, after hitting a yield point, the program hits another yield point in a finite amount of time (the start of execution and program termination being considered yield points for the purposes of this rule)".

On 4/25/06, Antti-Juhani Kaijanaho
John Meacham wrote:
* every runnable thread is guarenteed to run in a finite amount of time if a program reaches a yield-point infinitly often.
"Infinitely often" is unclear
"Infinitely often" is a very well-defined term in temporal logic. I
think it is this that John is referring to.
--
Taral

John Meacham
* Foreign concurrent calls, handle IO, and all IO actions that directly interact with the world outside the current process all must be yield-points. (in addition to any yield-points implied by the progress guarentee)
If an IO call includes a long period of waiting, we don't only want it to yield before or after it. We want it to allow other threads to proceed during the whole wait. -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/
participants (4)
-
Antti-Juhani Kaijanaho
-
John Meacham
-
Marcin 'Qrczak' Kowalczyk
-
Taral