Strong Memory Consistency For Parallel Programming