Patterns for Parallel Programming