An application-independent concurrency skeleton in Ada 95
design patterns : elements of reusable object - oriented software .