ParaSail has the notion of "concurrent objects" which enable safe synchronized access to shared data, but also provide real-time event-based programming, by using "queued" access based on a "dequeue condition" which can be an arbitrary boolean condition, or can be a time-based condition. For examples included in the ParaSail release, see the PSL::Core::Clock, PSL::Core::Atomic, and PSL::Core::IO modules in lib/aaa.psi, and the "Drinking Philosophers" example in examples/drinking_phils.psl.
Feel free to ask more specific questions based on these examples.
-Tuck