On 9/18/05, Ivan Boldyrev lispnik@gmail.com wrote:
Un Unix-like (or POSIX-like) The only safe thing you can do during asynchronous interrupt handling is to read or set variable of some type sig_atomic_t.
Maybe you didn't realize that we were talking about Lisp and not C. Asynchronous interrupts at the Lisp level need not be asynchronous signals at the C level. Lisp interrupts can be either higher-level than the C level (already handling your sig_atomic_t and then doing something when back from the signal handler), or they can be lower-level (talking directly to the kernel, to avoid the limitations of the C library). And whatever level we are at, the problem of propagating asynchronous interrupts to the level above (that of the application -- which itself could be layered into many levels) is a non-trivial problem with essentially the same kind of solutions, only at a higher level.
And the challenge for concurrent languages is PRECISELY to offer a way to deal with asynchronousness that deals nicely with the above problem.
[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] If a vegetarian eats vegetables, what does a humanitarian eat? -- Mark Twain