I’ve been simulating preemptive multithreading using alarm(2) notes
and lots of stack smashing. (I’ll have some questions about that
later, if things don’t go smooth.)
Anyhow, my taskfork looks like:
void
taskfork(ulong flags)
{
long quantum;
...
quantum = alarm(0); // stop timer and save time left
...
// back to our regularly scheduled programming...
alarm(quantum == 0 ? 1 : quantum);
}
I included that ugly last line on the off chance that taskfork() is
called with less than a millisecond left and so alarm(0) will return
0. Is this neccessary, or can alarm(0) not ever return 0? Would it
be better to write:
if(quantum)
alarm(quantum);
else
postnote(PNPROC, getpid(), "alarm");
}
--Joel