I agree that compile-time constants is probably the way to go for the synchronus stuff, and even better (actually much better) is to make the overhead of having threads small. As to polling and signals, given that one would only do it (I think) in an otherwise single-threaded program, is there any point to the extra power of signal handlers have in the threaded case?