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

Reply via email to