Programming - Atomic Operations and Critical Sections in OpenMP